margin(待更新)

157 阅读2分钟

示例代码贴在最前边

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>margin重叠和坍塌</title>    <style>        body{            font-size: 10px;        }        .father{            width: 150px;            height:250px;            background-color: #cccccc;            margin-top: 20px;        }        .son-one , .son-two{            width:80px;            height:80px;        }        .son-one{            background-color: greenyellow;            margin-top:40px;            margin-bottom: 35px;        }        .son-two{            background-color:red;            margin-top:10px;            margin-bottom:20px;        }
        .blank{            margin-top:35px;            margin-bottom:40px;        }    </style></head><body>    <div class="father">        <div class="son-one">            这是第一个子元素        </div>
        <div class="blank"></div>        <div class="blank"></div>        <div class="blank"></div>        <div class="son-two">            这是第二个子元素        </div>    </div></body></html>

1.兄弟子元素之间——margin重叠

子元素1的margin-bottom和子元素2的margin-top两者之间会发生重叠,两个数值之间取较大值,作为两个子元素之间的垂直间距。

在上文的实例中,子元素1的margin-bottom为35px,子元素2的margin-top为10px,二者发生重叠,最终距离为35px。


加入3个空div块之后发现,重叠原理相同。

2.父元素和子元素之间——margin坍塌

前提:父元素没有文字内容&&父元素没有border&&父元素没有padding-top

这时最终效果取二者的较大值。

当父元素的margin-top的值>=子元素的值时,例如

        .father{            width: 150px;            height:250px;            background-color: #cccccc;            margin-top: 20px;        }        .son-one{            background-color: greenyellow;            margin-top:10px;            margin-bottom: 35px;        }

这时父元素距离浏览器的顶部20px


当父元素的margin-top的值<子元素的值时,例如子元素的margin-top换为40px.这时父元素一起被顶下去,距离浏览器顶部40px


以上两种情况总结来说就是:


ps:父元素有文字 || border || padding-top的情况:子元素的margin-top相对于父元素计算,并且不会对父元素的位置产生影响。

3.解决margin的重叠和塌陷问题

BFC待更新