BFC 块格式化上下文
创建BFC的情况(指路)
BFC是盒子元素布局的区域以及浮动元素与其他元素交互的区域,是一个作用范围;规定区域内的元素的排列方式

BFC特性
-
内部的Box会在垂直方向,一个接一个地放置
-
Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠
-
每个元素的margin-box的左边, 与包含块border-box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此。
-
BFC的区域不会与float box重叠。
BFC能做什么
- 高度塌陷
HTML:
<div class="container">
<div class="left"></div>
</div>
CSS:
.container {
width: 500px;
background-color: #6735;
border:2px solid red;
}
.left {
width: 100px;
height: 200px;
background-color: #343433;
float:left;
}

原因:
标准文档流中,container元素的高度由子元素left撑开,left元素设置float之后脱离了文档流,导致container元素高度塌陷
解决方法:
BFC具有包含浮动元素的特性,因此父元素设置overflow:hidden
创建BFC即可包含浮动子元素
- margin重叠
-
垂直方向上的块元素margin重叠
常见场景就不多说了嘻嘻 -
父子元素的margin重叠
<div class="box"></div>
<div class="wrap">
<h4>xixix</h4>
</div>
.wrap {
width: 200px;
background-color: #dedede;
overflow:hidden
}
.wrap h4 {
background-color: #fefe;
margin-left: 20px;
margin-top:30px;
}

原因:
属于同一个BFC的两个相邻Box的margin会发生重叠
解决方法:
wrap元素添加overflow:hidden
其他方法:
wrap元素添加border | padding
- 阻止浮动元素覆盖
<div class="box1"></div>
<div class="box2"> BFC的区域不会与float box重叠。BFC的区域不会与float box重叠。BFC的区域不会与float box重叠。BFC的区域不会与float box重叠。BFC的区域不会与float box重叠。BFC的区域不会与float box重叠。BFC的区域不会与float box重叠</div>
.box1{
height: 100px;
width: 100px;
float: left;
background: #dedede;
}
.box2{
width: 200px;
height: 200px;
background: #dede;
}

原因:
box1浮动之后脱离文档流,与box2重叠且引起文字环绕效果
解决方法:
box2增加overflow:hidden
创建BFC,防止与float元素重叠
网友评论