BFC 是 Block Formatting Context(块级格式化上下文)的缩写,是 CSS 中一个重要的概念。BFC 是页面中的一块独立的渲染区域,其中的元素按照特定规则进行布局和渲染。
在 BFC 中,每个盒子(元素)都会按照以下规则进行布局:
1. 盒子在垂直方向上从包含块的顶部开始放置,各个盒子按其在 HTML 中出现的顺序排列。
2. 盒子之间垂直方向上的距离由 margin 决定,不会发生重叠。
3. BFC 区域内部的盒子不会与浮动元素发生重叠。
4. BFC 区域内部盒子的边界会清除浮动。
触发 BFC 的条件包括:
- 根元素或包含根元素的元素
- 浮动元素(float 不为 none)
- 绝对定位元素(position 为 absolute 或 fixed)
- display 属性值为 inline-block、table-cell、table-caption、flex、inline-flex
- overflow 属性值不为 visible 的块级容器
使用 BFC 可以解决一些常见问题,如清除浮动、避免 margin 重叠等。了解和合理运用 BFC 对于掌握 CSS 布局和解决页面布局问题非常重要。如果您有任何进一步问题或需要更多信息,请随时告诉我!
在一个Web页面的CSS渲染中,块级格式化上下文 (Block Fromatting Context)是按照块级盒子布局的。W3C对BFC的定义如下:
浮动元素和绝对定位元素,非块级盒子的块级容器(例如 inline-blocks, table-cells, 和 table-captions),以及overflow值不为“visiable”的块级盒子,都会为他们的内容创建新的BFC(块级格式上下文)。
BFC是一个独立的布局环境,其中的元素布局是不受外界的影响,并且在一个 BFC 中,块盒与行盒(行盒由一行中所有的内联元素所组成)都会垂直的沿着其父元素的边框排列。
块格式化上下文(BFC)的行为通过一个简单的float
示例很容易理解。在下面的示例中,我有一个框,其中包含向左浮动的图像和一些文本。如果我们有足够多的文本,它会环绕浮动的图像和边框,然后环绕整个区域。
// html
<div class="outer"><div class="float">I am a floated element.</div>I am text inside the outer box.
</div>// css
.outer {border: 5px dotted rgb(214,129,137);border-radius: 5px;width: 450px;padding: 10px;margin-bottom: 40px;
}.float {padding: 10px;border: 5px solid rgba(214,129,137,.4);border-radius: 5px;background-color: rgba(233,78,119,.4);color: #fff;float: left; width: 200px;margin: 0 20px 0 0;
}
BFC 是布局中的一个迷你布局
你可以将 BFC 看作是页面内的一个迷你布局。一旦一个元素创建了一个 BFC,它就包含了所有的内容。正如我们所看到的,这包括浮动的元素,它们不再从盒子底部伸出来。BFC 还会导致一些其他有用的行为。
BFC 可以防止 margin 折叠
了解边距合并是另一个被低估的 CSS 技能。在下一个示例中,假设有一个背景颜色为灰色的 div
。
这个 div
包
// html
<div class="outer"><p>I am paragraph one and I have a margin top and bottom of 20px;</p><p>I am paragraph one and I have a margin top and bottom of 20px;</p>
</div>// css
.outer {background-color: #ccc;margin: 0 0 40px 0;
}p {padding: 0;margin: 20px 0 20px 0;background-color: rgb(233,78,119);color: #fff;
}