跳到主要内容

BFC

BFC 全称 Block Formatting Context,翻译过来就是块格式化上下文,它是 CSS 规范的一部分。

可以用一些 CSS 属性为一个元素创建出 BFC。决定元素的内容如何渲染以及与其他元素的关系和交互。BFC 有一个重要的特点:具有隔离作用。

通过下列方式可以创建块格式化上下文:

  • 根元素 <html>
  • 浮动(float,但值不能是 none);
  • 绝对定位元素(positionabsolute 或者 fixed);
  • overflow 值不为 visible 的块元素;
  • 行内块元素(displayinline-block);
  • displayflow-root,它可以创建无副作用的 BFC;
  • 弹性元素(displayflexinline-flex 元素的直接子元素);
  • 网格元素(displaygridinline-grid 元素的直接子元素`);
  • 多列容器(元素的 column-countcolumn-width 不为 auto);
  • 表格单元格(displaytable-cell,HTML 表格单元格默认为该值);
  • 表格标题(displaytable-caption,HTML表格标题默认为该值);
  • 匿名的表格单元格元素(元素的 displaytabletable-rowinline-table 等);

BFC 应用举例:解决 margin 塌陷问题;子元素浮动后父元素没有高度问题;

BFC 用于决定元素的内容如何渲染以及与其他元素的关系和交互。BFC 有五条规则:

  1. BFC 有隔离作用,内部元素不会受外部元素的影响(反之亦然)。
  2. 一个元素只能存在于一个 BFC 中,如果能同时存在于两个 BFC 中,那么就违反了 BFC 的隔离规则。
  3. BFC 内的元素按正常流排列,元素之间的间隙由元素的外边距(margin)控制。
  4. BFC 中的内容不会与外面的浮动元素重叠。
  5. 计算 BFC 的高度,需要包括 BFC 内的浮动子元素的高度。