高度塌陷及BFC笔记

86 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,点击查看活动详情

高度塌陷

高度塌陷出现的场景

     当子元素有浮动,父元素没有设置高度时,(子元素撑不开父元素高度时),父元素就会出现高度塌陷

解决高度塌陷的方法:

    1.给出现高度塌陷的元素添加overflow:hidden
    原理:因为将overflow属性设置为hidden触发了BFC
    因为BFC规定计算BFC元素高度时,里面浮动元素也参与计算

    弊端:会隐藏掉定位到区域外的元素

    2.在浮动元素的下方,添加同级元素空div。并且给空div添加样式clear:both;
    原理:忽略了上方浮动元素带来的预留空间

    弊端:写了大量的空div 造成项目代码冗余

    3:万能清除法:
        出现高度塌陷的元素:after{
            content:""; 添加一个元素
            display:block;  转为行内块
            height:0;      将高度设置为0
            clear:both;   忽略浮动带来的预留空间
            overflow:hidden; 溢出部分隐藏
            visibility:hidden; 使元素不可见,但占用空间
        }

BFC

    BFC又称"块级格式化上下文"
    作用:规定了某些布局逻辑
    条件:不是所有块级元素都是bfc,要形成BFc的触发条件

布局规则

    一、内部的box会在垂直方向,一个一个排列
    二、box垂直方向的距离由margin决定,属于同一个bfc两个相邻的元素之前的margin值会出现重叠(按照最大值设置)
    三、计算bfc的高度时,浮动的元素也要参与计算
    四、bfc是页面上一个独立的隔离容器,里面的元素不会影响到外面的元素
    五、BFC的区域不会与float box重叠
    六、每个元素的margin box的左边,与包含块的border box的左边相接触

触发BFC的条件

    在根元素中(html)
    设置float属性不为none
    设置position为absolute或fixed
    display为inline-block,table-cell,table-caption,flex,inline-flex
    overflow不为visible