BFC

1,279 阅读2分钟

什么是BFC

  • Block Formatting Context(BFC)  块格式化上下文

他决定了块级元素如何对它的内容进行布局,以及与其他元素的关系和相互关系
块级元素:父级(是一个块元素)
内容:子元素(是一个块元素)
其他元素: 与内容同级别的兄弟元素
相互作用: BFC里的元素与外面的元素不会发生影响

触发条件

触发BFC的方式(以下任意一条就可以)

  1. float的值不为none(可能的值left, right, none, inherit, 默认为none)
  2. overflow的值不为visible(可能的值visible, auto, hidden, scroll, inherit)
  3. display的值为table-cell、table-caption和inline-block之一(inline-block:行内块元素;table-caption:此元素作为一个表格标题显示(类似<caption>);table-cell:此元素作为一个表格单元格显示(类似<td>和<th>))
  4. 弹性元素(display为 flex 或 inline-flex元素的直接子元素)
  5. 网格元素(display为 grid 或 inline-grid 元素的直接子元素)
  6. position的值是absolute或fixed(可能的值absolute绝对定位,fixed固定定位,relative相对定位,static默认值没有定位,inherit从父元素继承position的值,默认z-index的值是0)
  7. 根元素(<html>)
  8. display 值为 flow-root 的元素(这个属性很不错)
    • The element generates a block container box, and lays out its contents using flow layout. It always establishes a new block formatting context for its contents
  9. 等,可以查看下面的参考文章,这些基本够日常开发用

BFC布局和普通文档流布局的区别

普通文档流

  1. 浮动的元素不会撑起父元素的高度
  2. 第一个不脱离文档里的元素margin-top会传递给父元素(margin塌陷)

BFC布局文档流

  1. 浮动元素会撑起父元素的高度
  2. 不会造成margin塌陷

参考文章

MDN 格式化上下文
display: flow-root
BFC