BFC机制

114 阅读2分钟

前言

FC (Formatting Contexts),格式化上下文,是W3C CSS2.1规范中的一个概念。它是页面中的一块渲染区域,并且有一套渲染规则,它决定了其子元素将如何定位,以及和其他元素的关系和相互作用。CSS2.1中只有BFC和IFC。

什么是BFC?

  • BFC(Block Formatting Contexts) 块级格式化上下文。
  • 具有 BFC 特性的元素可以看作是隔离了的独立容器,容器里面的元素不会在布局上影响到外面的元素。

如何触发BFC?

  • 根元素或其它包含它的元素
  • 浮动 float: left/right/inherit
  • 绝对定位元素 position: absolute/fixed
  • 行内块 display: inline-block
  • 表格单元格 display: table-cell
  • 表格标题 display: table-caption
  • 溢出元素 overflow: hidden/scroll/auto/inherit
  • 弹性盒子 display: flex/inline-flex

BFC布局规则

  • 同一个BFC内部相邻两个垂直方向的块级元素会发生margin合并。
  • 不同的BFC区域之间是互相独立的,互不影响。
  • BFC不会与浮动元素重叠。
  • 计算BFC的高度时,浮动元素也参与计算。

BFC的应用

1. 使用BFC防止块级元素垂直方向外边距合并。
两个相邻的块级元素垂直方向的外边距会发生合并,让其中一个块级元素触发BFC,此时的两个元素就不属于同一个BFC了,它们的布局互不干扰,垂直方向的外边距就不会发生合并了。

2. 解决父元素高度塌陷问题
父元素不设置高度的情况下,子元素浮动会导致父元素高度塌陷。浮动的元素是BFC区域,把父元素也变为BFC区域则可以识别到内部的BFC区域。

3. 防止元素被浮动元素覆盖(自适应两栏布局)
两个同级的元素,处于标准流中的元素会被浮动元素覆盖,但文本不会被覆盖。
可以让被覆盖的元素触发BFC,则浮动的元素就不再覆盖该元素,可采用该方式实现自适应两栏布局,左边浮动元素宽度固定,右边触发BFC的元素不设置宽度,让其内容自适应宽度。