什么是BFC


BFC 全称:Block Formatting Context, 名为 “块级格式化上下文”。

在一个Web页面的CSS渲染中,BFC是按照块级盒子布局的。

简单来说就是,BFC是一个完全独立的空间(布局环境),让空间里的子元素不会影响到外面的布局。

怎样触发BFC

则满足下列的任意一个或多个条件即可:

1、浮动元素,float 除 none 以外的值;
2、绝对定位元素,position(absolute,fixed);
3、display的值是inline-block、table-cell、flex、table-caption或者inline-flex
4、overflow 除了 visible 以外的值(hidden,auto,scroll);
5、body 根元素

BFC的特性

1、内部的Box会在垂直方向上一个接一个的放置。
2、垂直方向上的距离由margin决定
3、bfc的区域不会与float的元素区域重叠。
4、计算bfc的高度时,浮动元素也参与计算
5、bfc就是页面上的一个独立容器,容器里面的子元素不会影响外面元素。

常见应用场景

BFC 的特性不是背的,真正有用的是它解决的几个经典布局问题:

1. 清除浮动(解决父元素高度塌陷)

父元素里的子元素都浮动后,父元素高度会塌成 0(特性 4 的反面)。给父元素触发 BFC(如 overflow: hidden),浮动子元素就会参与高度计算:

.parent {
    overflow: hidden; /* 触发 BFC,父元素重新包住浮动子元素 */
}

2. 防止垂直 margin 塌陷

相邻块级元素的上下 margin 会”取最大值”而非相加(margin 折叠)。把其中一个包进 BFC 容器,它们就互不影响了:

.box {
    overflow: hidden; /* 内部 margin 不再和外面的 margin 折叠 */
}

3. 自适应两栏布局(阻止与浮动重叠)

左栏浮动、右栏不浮动时,右栏会因”BFC 区域不与 float 重叠”而被左栏挤开,实现自适应:

.aside {
    float: left;
    width: 200px;
}
.main {
    overflow: hidden; /* 触发 BFC,自动占满剩余宽度,不与左栏重叠 */
}

小结:遇到”浮动塌陷 / margin 重叠 / 两栏被挤”这类问题,优先想想能不能用 BFC 隔离解决。


文章作者: 弈心
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 弈心 !
评论
  目录