昨天写代码的时候遇到这样一个问题,我的“北京”怎么飘了?
最后还是overflow的BFC救我狗命,接下来本文将详细介绍一下什么是BFC(不是KFC)
1. 什么是BFC?
块格式化上下文(Block Formatting Context,简称BFC)是Web页面中一个独立的渲染区域。在这个区域内,块级盒子的布局仅受该区域内元素的影响。BFC确保了外部元素不会干扰这个独立区域内的元素布局,并且内部的元素也不会影响到外部的元素。
2. BFC的特性:
- 包含浮动元素:在同一个BFC中,非浮动元素的边界不会与浮动元素重叠。
- 清除浮动:如果一个元素触发了新的BFC,那么它的内容就不会被浮动元素所覆盖,因为它会创建一个新的包含上下文。
- 垂直外边距折叠:在一个BFC中,相邻的两个块级元素的垂直外边距会发生折叠,而在不同的BFC中则不会。
- 溢出处理:BFC可以防止子元素的内容溢出到父元素之外。
3. 如何触发BFC?
要创建一个新的BFC,可以通过以下几种方式之一来实现:
- 根元素 (
<html>) - 浮动元素 (
float的值不为none) - 绝对定位元素 (
position的值为absolute或fixed) - 行内块元素 (
display的值为inline-block) - 表格单元格 (
display的值为table-cell) - 表格标题 (
display的值为table-caption) - 匿名表格盒子 (
display的值为table,table-row,table-header-group,table-footer-group,table-row-group,table-column,table-column-group) - 具有
overflow值不为visible的元素 - 弹性盒子 (
display的值为flex或inline-flex) - 网格容器 (
display的值为grid或inline-grid) column-count或column-width不为auto的多列容器writing-mode不为horizontal-tb的元素
4. BFC的例子
-
清除浮动:当一个父元素中包含浮动子元素时,如果不给父元素设置高度,父元素的高度将塌陷,即不会根据子元素的高度自动调整。通过将父元素转换为BFC(例如,设置
overflow: hidden;),可以解决这个问题,因为BFC会包含其内部的所有浮动元素。.clearfix { overflow: hidden; } -
避免外边距折叠:当两个相邻的块级元素之间发生外边距折叠时,它们之间的间距不是各自外边距之和,而是取较大者。为了阻止这种情况,可以让其中一个元素成为BFC的一部分。
.no-margin-collapse { overflow: hidden; } -
防止溢出:如果你有一个相对定位的父元素和绝对定位的子元素,而你希望子元素不要超出父元素的边界,你可以让父元素形成BFC,这将确保子元素不会溢出父元素。
.prevent-overflow { position: relative; overflow: hidden; }
5. 总结
理解BFC对于掌握CSS布局至关重要,尤其是在处理复杂的网页设计时。不然下一个飘起来的可就不只是“北京”了嘿嘿。
最后祝大家平安夜快乐,喜欢本文的就点个赞吧,感谢支持