在标准文档流中,竖直方向(是竖直方向,水平方向的不会出现塌陷现象)的margin会出现叠加现象,即较大的margin会覆盖掉较小的margin,竖直方向的两个盒子中间只有一个较大的margin,这就是margin的塌陷现象。
注意: 两个盒子的垂直外边距完全接触才会触发
<div>
<div class="box1" style="height: 100px;width: 200px;background-color: #56b6c2;margin-bottom: 50px">
box1
</div>
<div class="box2" style="height: 100px;width: 200px;background-color: #bf41b4;margin-top: 100px">
box2
</div>
</div>
<div>
<div class="box1" style="height: 200px;width: 400px;background-color: #56b6c2;margin-bottom: -50px">
box1
</div>
<div class="box2" style="height: 50px;width: 200px;background-color: #bf41b4;margin-top: -100px">
box2
</div>
</div>
<div>
<div class="box1" style="height: 200px;width: 400px;background-color: #56b6c2;margin-bottom: -50px">
box1
</div>
<div class="box2" style="height: 50px;width: 200px;background-color: #bf41b4;margin-top: 200px">
box2
</div>
</div>
正常情况,margin=0的时候
<div>
<div class="box" style="height: 300px;width: 300px;background-color: aquamarine">
<div class="box-child" style="height: 100px;width: 100px;background-color: #abb2bf">
</div>
</div>
</div>
子标签设置 margin-top: 10px
<div>
<div class="box" style="height: 300px;width: 300px;background-color: aquamarine">
<div class="box-child" style="height: 100px;width: 100px;background-color: #abb2bf;margin-top: 10px">
</div>
</div>
</div>
子盒子和父盒子之间并没出现期望的10px间隙而是父盒子与子盒子一起与页面顶端产生了10px间隙(即父级盒子往下塌陷了10px)。 即无论给子元素设不设置margin-top值,其都不发生作用,都会作用于父元素身上
解决方法:
<div>
<div class="box" style="height: 300px;width: 300px;background-color: aquamarine;overflow: hidden">
<div class="box-child" style="height: 100px;width: 100px;background-color: #abb2bf;margin-top: 10px">
</div>
</div>
</div>