前端

梗概

BFC(Block Formatting Context),即块级格式化上下文 它是页面中的一块抽象渲染区域 并且有一套属于自己的渲染规则 视频教程: 带你用最简单的方式理解最全面的BFC_哔哩哔哩_bilibili

BFC的渲染规则

  • 对于同一个BFC的俩个相邻的块级元素, 会发生外边距重叠
  • 打破外边距穿透
  • BFC的区域不会与外部float的元素区域重叠,即BFC环绕浮动
  • BFC天然具有清除浮动的效果
  • BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素,反之亦然

设置为BFC的方法

满足以下任意一个方法就可以设置一个块级元素为BFC:

  • 根元素(<html>
  • 浮动元素float 值不为 none
  • 绝对定位元素position 值为 absolute 或 fixed
  • 行内块元素display 值为 inline-block
  • 表格单元格(display 值为 table-cell,HTML 表格单元格默认值)
  • 表格标题(display 值为 table-caption,HTML 表格标题默认值)
  • 匿名表格单元格元素(display 值为 tabletable-row、 table-row-grouptable-header-grouptable-footer-group(分别是 HTML table、tr、tbody、thead、tfoot 的默认值)或 inline-table
  • ==overflow ==值不为 visibleclip 的块元素 ⭐
    • 通常是hidden
  • display 值为 flow-root 的元素 ⭐
  • contain 值为 layoutcontent 或 paint 的元素
  • 弹性元素display 值为 flex 或 inline-flex 元素的直接子元素),如果它们本身既不是 flexgrid 也不是 table 容器
  • 网格元素display 值为 grid 或 inline-grid 元素的直接子元素),如果它们本身既不是 flexgrid 也不是 table 容器
  • 多列容器(column-count 或 column-width (en-US) 值不为 auto,包括column-count 为 1
  • column-span 值为 all 的元素始终会创建一个新的 BFC,即使该元素没有包裹在一个多列容器中 (规范变更Chrome bug)

应用场景