相邻元素外边距塌陷合并
表现示例
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box {
            width: 100px;
            height: 100px;
        }
        #box1 {
            margin-bottom: 20px;
            background-color: red;
        }
        #box2 {
            margin-top: 10px;
            background-color: green;
        }
    </style>
</head>
<body>
    <div id="box1" class="box">box1</div>
    <div id="box2" class="box">box2</div>
</body>
</html> 
 


margin塌陷问题:上面例子两个 div 的间隔为200px,取 margin 重叠部分的更大值(这是正常情况,符合 CSS 的外边距合并规则),如果希望间隔 300px,可进行如下操作
解决方案
- 只给其中一个元素增加外边距(推荐)
 - 使用浮动给下面的元素增加浮动,使其脱离文档流就可以了
 - 使用定位给下面的元素使用定位,使其脱离文档流就可以了,原理和浮动一样。
 - 将其中一个元素变为行内块元素,使用 display: inline-block;属性将其中一个元素变为行内块元素就可以了,display的很多属性值都可以解决外边距合并问题,常用的就是 inline-block flex或 inline-flex
 -  
给其中一个元素增加一个父元素,给父元素添加overflow:hidden样式,这样会使兄弟元素不在同一个BFC区域下,这个元素就可以看做成隔离了的独立容器。容器内的元素不会影响容器外的元素。
 -  
给其中一个元素增加一个父元素,给父元素添加一个边框
 -  
给其中一个元素增加一个父元素,给父元素增加内边距
 
二、父子元素外边距合并(塌陷)
表现示例
 当一个元素包含在另一个元素中时(假设没有内边距或边框把外边距分隔开),它们的上和/或下外边距也会发生合并。请看下图:

解决方法:
- 给父元素或子元素增加浮动,让其脱离标准流就可以了
 - 给父元素或者子元素定位都可以,原理同样是使其脱离标准流,不过只能用绝对定位和固定定位
 - 将父元素变为行内块元素,display: inline-block;
 - 给父元素增加overflow:hidden;样式(推荐)
 - 给父元素增加边框border值第六种:给父元素增加内边距padding值
 


















