block formatting context 块级格式化上下文
BFC 就是这样的东西(堆叠上下文也是)
它没有定义
它只有特性/功能
inline-block:不是块的块
功能一:爸爸管儿子
用 BFC 包住浮动元素。(这 TM 不是清除浮动,.clearfix 才是清除浮动)
![](https://img.haomeiwen.com/i5037851/a530ae925e1b0d38.png)
我们发现,爸爸包不住儿子
解决:用BFC,让其能够包住儿子
1、让其爸爸浮动
float:left;
![](https://img.haomeiwen.com/i5037851/a356fd63f3b8d8cd.png)
2、让其爸爸绝对定位
position:absolute;
3、让其爸爸display:inline-block;table-cell;table-caption;flow-root
4、让其爸爸over-flow不为visible(比如auto)
重点讨论:上面的除了display:flow-root以外,其他的实现了功能(包住儿子)之前,还有副作用(比如浮动了,定位了等),flow-root(最新出的,很多浏览器不支持)只触发BFC功能
同一个块格式化上下文中的相邻块级盒之间的竖直margin会合并
![](https://img.haomeiwen.com/i5037851/1bc2fcc023a58367.png)
![](https://img.haomeiwen.com/i5037851/22e1e4e80ea56ac5.png)
sunzi跑出去了,baba没包住
son里有float:left,也是个BFC,sunzi在son里面,baba就不管sunzi了
原因:
![](https://img.haomeiwen.com/i5037851/4facc2b2546c7de0.png)
http://jsbin.com/jegejohuwu/1/edit?html,css,output
功能2:兄弟之间划清界限
![](https://img.haomeiwen.com/i5037851/0623a3e78d805b1c.png)
让哥哥和弟弟界限分开
![](https://img.haomeiwen.com/i5037851/372501c3a7214040.png)
让弟弟触发BFC
![](https://img.haomeiwen.com/i5037851/9ce3b423c24dd60f.png)
上面的问题
![](https://img.haomeiwen.com/i5037851/e52c9aa16ea91e92.png)
![](https://img.haomeiwen.com/i5037851/957abec5068583bd.png)
http://jsbin.com/biqizusiyu/1/edit?html,css,output
![](https://img.haomeiwen.com/i5037851/1de4a9649216b3df.png)
baba没有加BFC,其上边界在2那个地方,不在1
![](https://img.haomeiwen.com/i5037851/42679e9040c51266.png)
overflow:hidden有副作用,用display:flow-root(IE不支持)最好,意思都是BFC
也可不用BFC来解决:加个border-top:1px solid red;
![](https://img.haomeiwen.com/i5037851/aeb734f0cceb748b.png)
网友评论