BFC(块格式化上下文)

1、概念

BFC(block formatting context)块格式化上下文是web页面的可视化css渲染的一部分,是布局过程中生成块级盒子的区域,也是浮动元素与其他元素交互限定的区域。

2、创建BFC

1、根元素或包含根元素的元素
2、浮动元素(元素float不为none)
3、绝对定位元素(元素position为absolute或fixed)
4、行内块元素(元素display为inline-block)
5、表格单元格(元素的display为table-cell)
6、表格标题(元素的display为table-caption)
7、overflow的值不为visible的元素
8、弹性元素(display为 flex 或 inline-flex元素的直接子元素)
9、网格元素(display为 grid 或 inline-grid 元素的直接子元素)

3、BFC特性

1、BFC是一个独立的容器,容器内的元素不会影响容器外的元素,容器外的元素也不会影响容器内的元素。
2、在同一个BFC中,相邻的块级盒子的垂直外边距会发生重叠。
3、BFC区域不会和浮动盒子发生重叠。
4、BFC能够识别和包含浮动元素,当计算区域的高度时,浮动元素也可以参与计算。
5、盒子从顶端开始垂直的一个接一个的向下排列,盒子之间垂直的间距由margin决定。

4、BFC的应用

1、包含浮动元素,清除浮动

html:

<div class="container">
        <div class="Sibling"></div>
        <div class="Sibling"></div>
</div>

css:
.container { 
        overflow: hidden; /* creates block formatting context */ 
        background-color: green; 
} 
.container .Sibling { 
        float: left; 
        margin: 10px;
        background-color: lightgreen;  
}

特别提示:
通过 overflow:hidden 创建 BFC,固然可以解决高度塌陷的问题,但是大范围应用在布局上肯定不是最合适的,毕竟 overflow:hidden 会造成溢出隐藏的问题,尤其是与 JS 的交互效果会有影响。推荐使用伪类方式实现清楚浮动。

2.导致外边距折叠
相邻的两个盒子(可能是兄弟关系也可能是祖先关系)的垂直边距相遇时, 它们将形成一个外边距。这个外边距的高度等于两个发生折叠的外边距的高度中的较大者。外边距折叠(Margin collapsing)只会发生在属于同一BFC的块级元素之间。

html:
<div class="Container"> 
    <p>Sibling 1</p> 
    <p>Sibling 2</p> 
</div>

css:
.Container { 
    background-color: red; 
    overflow: hidden; /* creates a block formatting context */ 
} 
p { 
    background-color: lightgreen; 
    margin: 10px 0; 
}

3、避免外边距重叠
创建一个不同的 BFC ,就可以避免外边距折叠。

html:
<div class="Container"> 
        <p>Sibling 1</p> 
        <p>Sibling 2</p> 
        <div class="newBFC"> 
            <p>Sibling 3</p> 
        </div> 
</div>

css:
.Container { 
            background-color: red; 
            overflow: hidden; /* creates a block formatting context */ 
} 
p { 
            background-color: lightgreen; 
            margin: 10px 0; 
}
.newBFC { 
            overflow: hidden; /* creates new block formatting context */ 
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值