margin塌陷:垂直方向上的margin父子元素会结合在一起,会取其中最大值。
实例:
html代码
<!DOCTYPE html>
<html lang="en">
<head>
<meter charset="utf-8">
<title>margin</title>
<link rel="stylesheet" type="text/css" href="lesson3.css">
</head>
<body>
<div class="wrapper">
<div class="content"></div>
</div>
</body>
</html>
css代码
*{
margin: 0;
padding: 0;
}
.wrapper{
margin-left: 100px;
margin-top: 100px;
width: 100px;
height: 100px;
background-color: black;
/*border-top: 1px solid red;*/
/*overflow:hidden;*/
/*position:absolute;*/
/*display:inline-block;*/
/*float:left/right;*/
}
.content{
margin-left: 50px;
/*margin-top: 50px;*/
width: 50px;
height: 50px;
background-color: green;
}
未给子元素设置垂直方向上的margin时效果(为了便于观察给body加上背景颜色)
给子元素设置垂直方向上的margin时效果(并没有出现任何变化,此时垂直方向上的margin取父子元素中的最大值,当子级的值大于父级会带着父级一起移动。这种现象叫做margin塌陷)
子级设置margin-top:50px;时,不是子级距离父级上边框50像素。而是子级和父级距离文本标签50个像素
margin塌陷问题无法解决只能弥补,弥补margin塌陷要用到BFC (Block formatting context) “块级格式化上下文”
如何触发一个盒子的bfc
1. position:absolute;
2. display:inline-block;
3. float:left/right;
4. overflow:hidden; // 溢出部分隐藏
要弥补margin塌陷只需要给父级元素加上四种中任意一种即可
效果
margin合并:当两个上下位置关系的div元素,在通过margin-top、margin-bottom改变间距时,如果属性的值相同,则两容器间的距离就是这个值;如果两个属性的值不同,则取较大值作为两容器间的距离。
解决方法:
1.给两个div元素加一个父级元素,再使用bfc进行解决
2.直接给其中一个多设置像素即可,即如果想间距为300,直接给第一个设置300