BFC的含义
Block Formatting Context ,块级格式化上下文。独立的块级渲染区域,只有block-level box参与,拥有一套渲染规则来约束块级盒子的布局,与区域外部无关。
BFC生成
满足下列条件之一:
- 根元素或其它包含它的元素,
 - 浮动的元素,float为left/right
 - overflow的值不为visible,auto/scroll/hidden
 - position:absolute/fixed
 - display的值为inline-block、table-cell、table-caption、flex,flow-root(chrome及火狐支持,兼容性较差)
 
布局规则
- 元素在垂直方向从上至下排列。
 - 元素垂直方向的距离由margin决定,两个相邻盒子的margin可能发生重叠
 - 每个元素的左外边距与包含块的左边界相接触,不会超出它的包含块
 - BFC区域不会与float元素区域重叠
 - 计算BFC的高度时,浮动子元素也参与计算
 - 容器里的子元素不会影响到外面的元素
 
应用
1.margin重叠:1
2
3
4
5
6
7
8
9
10
11
12<<style>
    p{
        margin: 10px 0;
    }
</style>
<div class="box">
    <p>p1</p>
    <div style="overflow:hidden;">
        <p>p2</p>
    </div>
    <p>p3</p>
</div>
2.子元素浮动,父元素高度塌陷:1
2
3
4
5
6
7
8
9
10
11
12
13<style>
    .wrap{
        overflow:hidden;
    }
    .float{
        float:left;
    }
</style>
<div class="wrap">
 <div class="float">
     我是个浮动的子元素
 </div>
</div>
3.浮动元素覆盖在文档流元素上:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20<style>
    .wrap1{
        float: left;
        width: 100px;
        height: 100px;
        background-color: pink;
    }
    .wrap2{
        width:200px;
        height:200px;
        background-color: skyblue;
        overflow: hidden;
    }
</style>
<div class="wrap1">
    wrap1
</div>
<div class="wrap2">
    wrap2
</div>
引申应用:创建两栏自适应布局