外边距重叠
产生原因:
- 垂直方向
- 相邻外边距
两个条件缺一不可。
代码示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>clearfix</title>
<style>
.box1{
width: 200px;
height: 200px;
background-color: rgb(75, 129, 209);
}
.inner{
width: 100px;
height: 100px;
background-color: rgb(103, 165, 216);
margin-top: 100px;
}
</style>
</head>
<body>
<div class="box1">
<div class="inner"></div>
</div>
</body>
</html>
此时,inner设置的margin-top导致两个盒子一起下移100px
该现象是由于垂直方向 上, 相邻外边距折叠引起的。
解决
- 方案一
.box1::before{
content: '---';
}
采用伪类before将两者隔开,让两者不相邻,
此时,两者不再相邻,也就不会出现外边距折叠,
但这种方案并不完善,会多出来一定高度,破坏了布局。
- 方案二
box1::before{
content: '';
display: table;
}
效果
clearfix作用
<style>
.box1{
width: 200px;
height: 200px;
background-color: rgb(75, 129, 209);
}
.inner{
width: 100px;
height: 100px;
background-color: rgb(103, 165, 216);
margin-top: 100px;
}
.clearfix::before,
.clearfix::after{
content: "";
display: table;
clear: both;
}
</style>
</head>
<body>
<div class="box1 clearfix">
<div class="inner"></div>
</div>
</body>
高度塌陷
代码示例
<style>
.clearfix::before,
.clearfix::after{
content: "";
display: table;
clear: both;
}
.box2{
margin-top: 100px;
border: 5px inset #85a7b1;
}
.inn{
height: 200px;
width: 200px;
float: left;
background: #ADD8E6;
}
</style>
</head>
<body>
<div class="box2">
<div class="inn">
</div>
</div>
效果
clearfix解决
//父元素添加clearfix类
<div class="box2 clearfix">
<div class="inn">
</div>
</div>
效果