我们需要知道什么时候会出现外边距塌陷这样的问题:
1.垂直方向,不是水平方向,也就是说margin-top
和margin-bottom
才存在这样的问题。
2.块级元素,不是行内元素,也不是行内块级元素。也就是说只能是display:block
才存在这样的问题。
首先我们来看两个栗子:
栗子一:兄弟之间外边距塌陷
<style>
#bro1{
width:500px;
height:100px;
background:#f000f0;
}
#bro2{
width: 500px;
height:100px;
background:#0000ff;
}
</style>
<body>
<div id="bro1"></div>
<div id="bro2"></div>
</body>
![560ad7426e86d7704977882f2d566b12.png](https://i-blog.csdnimg.cn/blog_migrate/44486ac5af7de1d22fe0641dac3c2362.png)
此时我们在bro1
上加底部外边距和bro2
上加顶部外边距。
.bro1{
margin-bottom:50px;
}
.bro2{
margin-top:50px;
}
按道理说,bro1
和bro2
之间的距离应该是100px
,如下图的情况:
![49868cb3350f3dc613a9b0004043dcac.png](https://i-blog.csdnimg.cn/blog_migrate/48c0c5c7c056bb68eb30453205e6570b.png)
但是结果是bro1
和bro2
之间的距离是只有50px
,并没有出现叠加的情况,而是重叠。这就是外边距塌陷的结果。
![f8a98dd7dc1997ec1bbd70c23080044e.png](https://i-blog.csdnimg.cn/blog_migrate/d3950072843ad239597254d3d6127ed6.png)
我们的解决办法是:
/*增加左浮动 或 转换为行内块*/
/*float: left; !* 1.设置左浮动 解决外边距margin 合并问题呢*! */
/*display: inline-block; !*2.转换为行内块 解决外边距margin 合并问题*!*/
栗子二:父子元素之间的外边距margin合并问题(外边距塌陷)
<style>
#father{
width: 200px;
height: 200px;
background: #f000f0;
}
#child{
width: 100px;
height: 100px;
background: #0000ff;
}
</style>
<body>
<div id="father">
<div id="child"></div>
</div>
</body>
![8578e7cc756a01abb46915f8ad9698b3.png](https://i-blog.csdnimg.cn/blog_migrate/e22368ee71c74d1fbfad7be7a23c821f.png)
此时我们在child
上加上顶部外边距
#child{
margin-top: 20px;
}
并没有出现我们正常思维想象的下图这种情况
![82513b8d4aa62b60c04c4769bd7c433d.png](https://i-blog.csdnimg.cn/blog_migrate/63f551ba2bd87f60f9f6e7c4672454b5.png)
而是实际上是下面这样的,child
的外边容器和child
整体都下移了20px
,这就是外边距塌陷的结果。
![017354585772f4487014f15844c4a697.png](https://i-blog.csdnimg.cn/blog_migrate/f98513849f8e046eca9d3e2ee0b5e8fd.png)
我们的解决办法是:
父元素添加代码段:
/*border: 1px solid transparent; !*方法1*!*/
/*float: left; !*方法2*!*/
/*position: absolute; !*方法3*!*/
/*padding: 1px; !*方法4*!*/
/*display: inline-block; !*方法5*!*/
/*overflow: hidden; !*方法6*!*/
/*overflow: auto; !*方法7*!*/