一.什么是BFC?
MDN原话:块格式化上下文(Block Formatting Context,BFC)是 Web 页面的可视 CSS 渲染的一部分,是块级盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域。
通俗的理解
BFC 是一个独立的布局环境,在这个环境中,元素的布局不会影响到外部元素。注意这里是独立的布局环境,html根元素本身也是一个BFC。
什么情况下会触发BFC?
触发BFC的条件有很多,单凭记忆肯定记不住,比如常用的触发BFC的条件有以下几个:
- 设置了overflow:hidden的元素
- 浮动元素
- 绝对定位或固定定位的元素
BFC的使用场景(重点)
1.解决父盒子高度塌陷问题
问题描述:如果父盒子内部包含若干个浮动子盒子,子盒子会脱离标准流,导致父盒子"看不见"子盒子的高度。
可能的疑问:那为什么不给父盒子设置高度呢? 因为如果给父盒子固定的高度,后续再向其中添加子盒子的时候又得去重新设置父盒子的高度,这样不利于后续的扩展!
解决办法:给父盒子设置一个overflow:hidden,触发BFC使得它成为一块独立的渲染区域。在BFC中,浮动元素会参与计算其父元素的高度。这是清除浮动的常用方法。
2.实现两栏布局
两栏布局是什么:一边宽度固定,另一边宽度自适应。
BFC实现两栏布局原理:触发BFC的盒子会自动避开浮动盒子。
有一个坑:两栏之间的margin只能通过浮动盒子来设置!!!
测试代码如下
HTML部分
<div class="leftPart"></div>
<div class="contentPart"></div>
CSS部分
.leftPart {
background-color: #867070;
height: 50px;
width: 50px;
float: left;
margin-right: 10px;
}
.contentPart {
overflow: hidden;
height: 50px;
background-color: #d5b4b4;
margin-left: 10px;
}
3.BFC解决外边距塌陷的问题
外边距塌陷是什么: 当两个垂直方向上相邻的块级元素的外边距相遇时,它们会合并为一个外边距。这个合并后的外边距的大小等于两个外边距中较大的那一个。
通俗解释:两个嵌套关系的块盒,Box1是父盒子,Box2是子盒子,两者均设置margin-top,那么实际的margin会取两者中大的那一个。
BFC解决原理:通过给父盒子设置BFC,使得子盒子和父盒子处于不同的BFC(子盒子位于父盒子的BFC,父盒子可能处于HTML根元素的BFC)。使得两者形成独立的渲染区域。就不会出现外边距塌陷的问题了。
可能的疑问: 如果两个兄弟盒子之间出现margin合并呢?
比如两个兄弟盒子(top)和(bottom)的上边距和下边距都设置了值,但是会取较大的一个,也就是发生了外边距塌陷,这个时候的解决办法就是给一个盒子使用div包裹,然后给这个div一个overflow:hidden,触发BFC,这样top和bottom两个盒子处于不同的BFC,不会出现外边距塌陷的问题。
测试代码如下
HTML部分
<div class="container">
<div class="content1"></div>
</div>
CSS部分
.container {
/* overflow: hidden; */
height: 300px;
width: 500px;
background-color: #a4bc92;
margin-top: 30px;
}
.content1 {
height: 100px;
width: 200px;
background-color: #ddffbb;
margin-top: 10px;
}
第一次写博客,可能内容和排版都不是很好,后续会不断完善~