块级格式化上下文(BFC)

内容列表

在进行页面布局时,通常有流式布局、定位布局、浮动布局这三种形式。而在布局过程中,各元素之间的影响却是一个很关键的问题。

BFC

BFC(Block Formatting Context,块级格式化上下文)是 CSS 2.1 中的一个规范,在 CSS 3 中也称为 Flow Root。首先,BFC 是块级元素身上的一个特性,通常它是隐藏不生效的,但某些情况下它会显现出来:

  1. float 不为 none
  2. position 不为 staticrelative
  3. overflow 不为 visible
  4. display 不为 table-celltable-captioninline-blockflexinline-flex

只要满足上述任一条件,该块级元素身上的 BFC 特性即会显现出来。

BFC 特性

BFC 特性所展现出来的效果可以通俗的总结为,**BFC 特性导致块级元素成为一个容器盒子,将会把容器内的元素与容器外的元素相互隔离(也就是说容器内外的元素之间不再发生相互作用)。**于是乎,我们就可以说该容器内的所有元素都处在了同一个块级格式化上下文中,只有它们之间才会发生相互作用。

清除 margin 重叠

最典型的相互作用就是两个相邻的块级元素垂直方向上的 margin 值会发生重叠并取最大值。当我们为其中一个元素包裹一个 div 元素并使该元素的 BFC 显现(例如 overflow:hidden)时,我们会发现原先两个元素在垂直方向上的 margin 值已不再重叠,这也就是说明它们之间已不存在相互作用。

清除 float 覆盖

当一个元素 float 设置不为 none 时,该元素将会浮动起来脱离文档流,导致它后面的非浮动元素前移,从而自己覆盖在前移的元素上。这时候,当我们使它后面的非浮动元素 BFC 特性显现(例如 overflow:auto)时,我们就会发现这些元素不会前移了。

float 包含

同样地,当父元素的高度没有设置,子元素浮动起来后,父元素的 height 依然为 0。这时候,我们使父元素的 BFC 特性显现(例如 float:left)时,我们会发现父元素的高度被浮动的子元素撑起来了,也就是父元素将浮动子元素包含了起来。

清除文字环绕

当一个浮动元素后面跟了个 <p> 元素且内部有大量文字,这些文字会产生环绕效果,也就是环绕在浮动元素周围。我们可以使该 p 元素的 BFC 特性显现(例如 overflow:hidden),然后我们就可以看到文字全部显示在了侧边,而不会再环绕在该浮动元素上下方,也就是类似评论功能中头像与评论文字两侧布局的效果。

结语

事实上,BFC 特性还有许多其它的妙用,我们在开发过程中可以多尝试,挖掘它新的技巧。

相关

使用 Jest 和 Puppeteer 构建 Web 自动化测试平台

测试为软件的稳定和完善提供了必要的支持,Web 前端开发领域相比于做单元测试,端到端测试更有意义和价值。谷歌发布的 Puppeteer 工具和脸书发布的 Jest 测试工具为 Web 端到端测试提供了极大的便利,这里记录了如何使用它们构建一个 Web 自动化测试平台。

了解更多

(转载)如何实现网站鼠标特效

使用以下代码可以实现一个在画布上的鼠标特效

了解更多

如何更好的维护开源项目

一直以来,开源精神被开发者所推崇,开源项目为开发者提供了不用付出除时间以外任何成本就可以学习前沿技术的最佳途径,另一方面,我们应该思考开源为何会成功,在全球开发者参与协作的情况下代码仓库为何能保持整洁、不出现大规模冲突而奔溃,上下游依赖如何管理,这背后有既定的规范进行强约束,也有一系列社区工具来完成复杂而有价值的工作。所以,从参与或者维护开源项目的角度来看,这些社区公认的最佳实践值得我们了解,学习这些东西也能在一定程度上提高我们管理项目的能力。

了解更多