margin-top传递现象 (包含结构): 在一个包含结构中,子元素设置了margin-top后会连带父元素一起下来,如下代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
*{
margin: 0;
padding: 0;
}
.box1{
width: 200px;
height: 200px;
background-color: red;
margin-top: 50px;
}
.big{
width: 300px;
height: 300px;
background-color: green;
}
</style>
</head>
<body>
<div class="big">
<div class="box1"></div>
</div>
</body>
</html>
发生原因: BFC规则:box垂直方向的距离由margin决定,属于同一个BFC(都在html这个BFC)下的两个相邻box的margin会发生重叠,所以子元素设置了margin-top父元素也会往下走
解决办法:让他们属于不同的BFC,给父元素big添加overflow:hidden触发BFC.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
*{
margin: 0;
padding: 0;
}
.box1{
width: 200px;
height: 200px;
background-color: red;
margin-top: 50px;
}
.big{
width: 300px;
height: 300px;
background-color: green;
overflow: hidden;
}
</style>
</head>
<body>
<div class="big">
<div class="box1"></div>
</div>
</body>
</html>
2.并列结构中的现象:在一个并列结构中,一个元素设置了marigin-bottom,另一个元素设置了margin-top,两个元素中的间距不会求和,而是会选其中的较大值,如下代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
*{
margin: 0;
padding: 0;
}
.box1{
width: 200px;
height: 200px;
background-color: red;
margin-bottom: 50px;
}
.box2{
width: 300px;
height: 300px;
background-color: green;
margin-top: 150px;
}
</style>
</head>
<body>
<div class="box1"></div>
<div class="box2"></div>
</body>
</html>
发生原因: BFC规则:box垂直方向的距离由margin决定,属于同一个BFC(都在html这个BFC)下的两个相邻box的margin会发生重叠,所以中间的间距只会取一个值
解决办法: 给其中任意一个box加一个父元素并设置overflow:hidden; 触发BFC即可
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
*{
margin: 0;
padding: 0;
}
.box1{
width: 200px;
height: 200px;
background-color: red;
margin-bottom: 50px;
}
.box2{
width: 300px;
height: 300px;
background-color: green;
margin-top: 150px;
}
.father{
overflow: hidden;
}
</style>
</head>
<body>
<div class="box1"></div>
<div class="father">
<div class="box2"></div>
</div>
</body>
</html>