全称 Block Formatting Context 简称bfc,它规定了在该区域中,常规流块盒的布局规则。
BFC的生成 以下元素会在其内部创建BFC区域
- 根元素:
意味着,<html>元素创建的BFC区域,覆盖了网页中所有元素。
- 浮动和定位元素:
float值为left或者right
,position值为absolute或者fixed
- overflow不等于visible的块盒:
overflow值大多用hidden,对其他影响较小
- display的值为inline-block、table-cell、table-caption
同一BFC的内部规则(常规流块盒的特点)
- 常规流块盒水平方向上,必须撑满包含块。
- 常规流块盒在包含块的垂直方向上依次摆放。
- 常规流块盒若外边距无缝相邻,则进行外边距合并。
- 常规流块盒的自动高度和摆放位置,无视浮动元素。
不同BFC之间的规则
- BFC的区域不会与外部float的元素区域重叠;
- BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。外面的元素也不会影响容器内部;
- 不同的BFC区域,它们进行渲染时互不干扰,创建BFC的元素,隔绝了它内部和外部的联系,内部渲染不会影响到外部。
根据上面的规则,触发新的BFC形成可以产生几个应用场景
- 解决了浮动造成的高度坍塌(清除浮动)
- 可以用于布局,如两栏布局,左侧宽度固定,右侧宽度自适应auto
- 解决了margin外边距塌陷
总结
块格式化上下文对浮动定位与清除浮动都很重要。浮动定位和清除浮动时只会应用于同一个BFC内的元素。浮动不会影响其它BFC中元素的布局,而清除浮动只能清除同一BFC中在它前面的元素的浮动。外边距折叠(Margin collapsing)也只会发生在属于同一BFC的块级元素之间。