一、什么是BFC?
BFC,全称 Block Formatting Context,翻译成块级格式化上下文,它就是一个环境,HTML元素在这个环境中按照一定规则进行布局。一个环境中的元素不会影响到其它环境中的布局。
二、BFC的生成
- 在一个块级排版上下文中,盒子是从包含块顶部开始,垂直的一个接一个的排列的。每个盒子的左外边是触碰到包含块的左边的(对于从右向左的排版,则相反)
- 相邻两个盒子之间的垂直的间距是被margin属性所决定的,在一个块级排版上下文中相邻的两个块级盒之间的垂直margin是折叠的。从而导致了经典的外边距折叠问题,而发生折叠的主要原因是因为他们两个块级盒子在同一个BFC的环境下,解决办法是让他们俩个不在同一个BFC就ok啦。
- BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。
例子:经典浮动元素的塌陷问题。我们知道,一个元素中的子元素浮动了,这个父元素就会发生高度塌陷问题。下例中一旦内部的红色盒子浮动,蓝色盒子就无法被撑起,高度会变成0。原因就是因为浮动元素创建了一个新的BFC,红色盒子成为了一个独立的容器,不会影响到外面的父元素了。它的定位规则不再受制于这个父元素了。只要在在父元素加上overflow:hidden可以清除浮动,原因就是overflow:hidden可以生成一个新的BFC,而这个浮动的子元素,被它所包含了,从而成为一个独立容器,它的float外溢不了了,外面的元素不再受其浮动的影响,从而达到了清除浮动的作用。
<style>
.蓝色{
width:150px;
background:#ADD9E6;
margin:20px 0;
}
.红色{
width:100px;
height:100px;
background:#FFCCCC;
margin:20px 0;
//float:left;
}
</style>
<div class="蓝色"><div class="红色"></div></div>
四、BFC的常规作用
- 解决外边距重叠
- 解决子元素浮动,父元素高度塌陷
解决浮动元素周围文字环绕问题
<style>
.outer {
width: 400px;
overflow: hidden;
background-color: #eee;
}
.float {
width: 200px;
height: 100px;
background-color: #1c88d3;
float: left;
margin-right: 20px;
}
.text {
/* 创建BFC环境*/
overflow: auto;
}
</style>
<div class="outer">
<div class="float">I am a floated element.</div>
<div class="text">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Architecto corporis, deleniti dicta dolores eum expedita
explicabo ipsum magni numquam porro provident quae quam quas quibusdam repellendus sed unde voluptate
voluptatibus.
</div>
</div>
给text元素创建BFC前
给text元素创建BFC后