搞懂CSS中的BFC
BFC在CSS中是非常重要的,对于元素的布局有着重要的影响,涉及到了诸多问题,例如,float,position等。因此了解它是必要的。
一、BFC是什么
对于MDN(官方)定义:
块格式化上下文(Block Fromatting Context,BFC)是Web页面的可视化CSS渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域。
有点难懂,官方语言格式化一下:BFC是块级格式化上下文,它是Web页面中的一块渲染区域,它这个区域有着自己的渲染规则,它的规则决定布局对齐内容,以及与其他元素的关系。BFC提供一个独立的环境,HTML元素在这个区域内按照BFC的规则进行布局。简单说:BFC是一块独立的布局环境,内部的元素只影响内部元素,不会受外部元素影响。
二、BFC的布局规则
- BFC的高度,浮动子元素也要参与计算。如果不参与计算,怎么能伸开它的父元素的高度呢;
- BFC是一块独立的容器,容器中的子元素不会影响到外部的元素,外部的元素也不会影响容器的元素;
- 在同一个BFC中,float box模型之间不会发生重叠;
- 在同一个BFC中,两个相邻的Box的margin会发生重叠;
- BFC内部的box是垂直方向上布局的。
三、BFC创建
元素 | 属性值 |
---|---|
overflow | 除visible以外的值,hidden、auto、scroll |
根元素 | |
float | right 、left |
postion | absoulte、 fixed |
display | inline-block、table-cell、flex、table、table-x、flow-root、grid、inline-grid |
Layout、content、paint | |
all | |
非auto、以及column-count:1 |
元素满足以上任一个条件可创建BFC。其中删除线是非常用的。table-x:指table-row、table-row-group、table-header-group、table-footer-group。
四、BFC特性应用
下面代码运行环境,请使用Tryit Editor
1.同一个BFC相邻两个元素外边距重叠
从效果上看,<div>
元素都处于同一个BFC容器下(<html>
),所以第一个<div>
下边距与第二个<div>
上边距发什么了重叠,两个盒子的之间的距离只有100px。
如果要避免外边距的重叠,可以把<div>
元素放在不同的BFC容器中.
这样两个盒子之间的边距为200px。
2.BFC阻止父元素高度坍塌
先看看普通流布局
再看看触发BFC
我们可以看到,父元素红色容器已经被撑开了。
3.BFC阻止元素被浮动元素遮挡
没有触发BFC情况下
触发BFC情况下
两个
父元素自适应子元素高度布局:
父元素一个BFC,子元素是float同时触发BFC。子元素的宽度是固定的,子元素高度自适应内容。父元素自适应子元素的高度。