彻底理解BFC

BFC 究竟是什么?

BFC(Block Formatting Context ),块级格式化上下文,他是一个独立的、隔离的渲染区域,内部元素不会影响到外部。

BFC的三个特性:

  1. 内部外边距不会对外部产生影响
  2. 内部可以包含浮动元素
  3. BFC不与外部元素重叠

哪些情况会触发BFC?

  1. 根元素:html就是最大的BFC
  2. 浮动:float不为none
  3. 绝对定位:position为absolute或fixed
  4. 行内块元素:display: inline-block
  5. 表格单元格和表格标题:display:table-cell/table-caption
  6. 溢出非可见:overflow不为visible,最常用的overflow: hidden
  7. 弹性/网格元素:display: flex、display: inline-flex、display: grid、display: inline-grid 的直接子元素

最常见的方式:

  1. overflow:hidden,副作用最小
  2. display:flex
  3. display:inline-block

BFC可以解决什么问题?

  1. 浮动元素的父元素高度塌陷问题
    问题:子元素浮动后,父元素高度为0,背景色或边框无法包裹。
    解决:设置父元素overflow:hidden
  2. 兄弟元素外边距重叠问题
    问题:两个兄弟元素,上面的 margin-bottom: 50px,下面的 margin-top: 20px,最终间距只有 50px(取大值),而不是 70px。
    解决:给一个兄弟元素外面加一个BFC包裹起来
  3. 实现自适应两栏布局(圣杯布局、双飞翼布局)
    问题:左侧固定宽度浮动,右侧自适应宽度,且不重叠。
    解决:不浮动的元素overflow:hidden,使其成为一个BFC,这样就不会影响外部浮动元素了