什么是margin塌陷:当两个盒子嵌套时,我们调整子盒子在父盒子中的位置,左右使用margin-left/margin-right 就可以变换左右位置,但是使用margin-top时,子盒子在父盒子中的相对位置并没有发生变化,并且当子盒子的值超过父盒子和网页顶端的距离时,子盒子会带着父盒子一起移动。
发生margin塌陷代码:
html:下面所有实例html代码相同,所以只在此处展示:
<!DOCTYPE html>
<html lang="em">
<head>
<meta charset="UTF-8">
<title>margin塌陷</title>
<link rel="stylesheet" type="text/css" href="test.css" >
</head>
<body>
<div class="wrapper">
<div class="content"></div>
</div>
</body>
</html>
css 代码:
*{
padding:0px;
margin:0px;
}
.wrapper{
margin-left:100px;
margin-top:100px;
width:100px;
height:100px;
background-color:black;
}
.content{
width:50px;
height:50px;
background-color:blueviolet;
margin-left:50px;
margin-top:50px;
}
发生margin塌陷示意图:
margin塌陷可以用bfc触发解决:只要父盒子有下面任意一项代码,都可以触发bfc并且解决margin塌陷;
- position :absolute ; //进行定位(如果后面的元素只想按照顺序摆在它下面,那就不能用定位,一用下面的盒子就会上浮)
- display : inline-block ; //设置行级块元素()
- overflow : hidden; //隐藏子盒子溢出父盒子部分(如果本身内容就想溢出盒子,那就不能使用它触发)
- float : left / right: //定义元素往哪个方向浮动
解决代码演示:只演示一种,其它几种方式代码一样;
*{
padding:0px;
margin:0px;
}
.wrapper{
margin-left:100px;
margin-top:100px;
width:100px;
height:100px;
background-color:black;
position:absolute;
}
.content{
width:50px;
height:50px;
background-color:blueviolet;
margin-left:50px;
margin-top:50px;
}
样式展示:
注意:上面四个解决方法使用的先决条件是不影响别的需求,如果有影响,那就尝试去换别的条件去触发bfc;但是有时候会出现四种需求都出现的情况,所以说gfc只能缓解这个bug,并不能完全解决;