1. 概念
- BFC 即 Block Formatting Contexts (块级格式化上下文)
- BFC其实就是一个独立的渲染区域(容器),规定了区域内部元素的布局方式,并且区域内元素的布局不会影响到外面的元素。
2. 触发BFC的条件
- body根元素
- 浮动元素:float除了none以外的值
- 绝对定位元素:position(absolute、fixed)
- display为inline-block、table-cells、flex
- overflow除了visible以外的值(hidden、auto、scroll)
3. 使用场景
3.1 清除浮动
-
浮动的元素会脱离文档流,影响后面元素的布局
-
将元素放在BFC容器里,那么容器将会包裹着浮动元素。
- 没有添加浮动时
- 添加浮动后
- 紫色方块添加
float:left;
后造成高度塌陷,导致粉色方块上移并且被紫色盒子挡住
- 紫色方块添加
- 触发容器的BFC
<style> .box1{ width: 100px; height: 100px; background-color: indigo; float: left; } .box2{ width: 150px; height: 100px; background-color: pink; overflow:hidden; } </style> </head> <body> <div class="main"> <div class="box1"></div> <div class="box2"></div> </div> </body>
- 没有添加浮动时
3.2 解决margin重叠
-
在CSS中,两个或多个毗邻的普通流中的盒子(可能是父子元素,也可能是兄弟元素)在垂直方向上的外边距会发生叠加。
- 毗邻说明了他们的位置关系,没有被
padding
、border
、clear
和line box
分隔开。
- 毗邻说明了他们的位置关系,没有被
-
将上面那个盒子分别放入一个BFC容器中
<style> #main{display: flex;} </style> <body> <div id="main"> <div class="box1"></div> </div> <div id="main"> <div class="box2"></div> </div> </body>