块级格式化上下文

350 阅读2分钟

全称 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形成可以产生几个应用场景

  1. 解决了浮动造成的高度坍塌(清除浮动)
  2. 可以用于布局,如两栏布局,左侧宽度固定,右侧宽度自适应auto
  3. 解决了margin外边距塌陷

总结

块格式化上下文对浮动定位与清除浮动都很重要。浮动定位和清除浮动时只会应用于同一个BFC内的元素。浮动不会影响其它BFC中元素的布局,而清除浮动只能清除同一BFC中在它前面的元素的浮动。外边距折叠(Margin collapsing)也只会发生在属于同一BFC的块级元素之间。