all
You must replace the baseURL in hugo.toml file when deploying, you can manage this announcement from the params.toml file.

块级格式化上下文(BFC)

  • July 22, 2016
内容列表

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

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 特性还有许多其它的妙用,我们在开发过程中可以多尝试,挖掘它新的技巧。

comments powered by Disqus

相关

TypeScript:扩展第三方库的类型定义

TypeScript 作为 JavaScript 的超集,为 Web 开发带来了强类型语言和类似代码智能提示这种良好的开发体验,而代码提示依赖于类型定义文件。类型定义文件的发展也经历了一个逐步演变的过程,从最初基于 JavaScript 编写的 npm 包,通过社区方案来引入类型定义包,再到目前多数模块基于 TypeScript 编写并在发布时带上类型定义文件这种最佳方案,开发者体验得到进一步的提升。

了解更多

文档对象模型(DOM)

在网页设计中,有一个很重要的角色需要我们了解,DOM 帮助我们对页面元素进行增、删、改等全方位的操作,而且让 JavaScript 在客户端修改 HTML 文档成为一个很简单的事情,可以说 DOM 为我们操作 HTML 文档提供了强大的编程接口。

了解更多

DOM-文档片段

DOM 操作是非常消耗性能的,如果要进行大量的 DOM 操作,我们可以选择在内存中先构建一个文档片段然后一次性插入 DOM 树。

了解更多