什麼是margin-top塌陷
margin-top塌陷是在CSS的盒子模型中出現的一種現象,描述的是當父元素包裹着一個子元素的時候,當給子元素設定margin-top屬性時,此時隻是想讓子元素的邊框距離父元素邊框有一段距離,而卻出現了父元素的頂端距離body這個邊框出現了位移,這就是margin-top塌陷的現象。
在未給子元素(綠色部分)添加margin-top屬性的時候,網頁如下圖顯示:
但是當給子元素加上margin-top屬性的時候網頁顯示就變成了如下圖所示:
你會發現,子元素的邊界與父元素(黃色部分)的邊界距離并沒有增大,反而是父元素的上邊界與浏覽器上邊界的距離增大了,也就是父元素帶着子元素一起下移了一段距離,經過檢查,這段距離也正好等于我們給子元素設定的margin-top的屬性值,這就是margin-top塌陷的現象。
怎麼解決margin-top塌陷
對于margin-top的塌陷問題,可以從以下幾點去解決,親測有效:
1.給父元素增加邊框
為了不影響原先的圖像效果,可以将邊框顔色設定為白色(與浏覽器背景顔色一緻)
2.溢出隐藏
在父元素的style裡面添加overflow:hidden;
3.利用浮動
給父元素的style添加浮動,但是這種方法不推薦使用。因為會帶來未知的錯誤
4.給父元素添加position:fixed;
這裡用到了定位的知識,将父元素顯示在固定位置,就不會受margin-top塌陷的問題影響
5.給父元素設定display:table;
6.使用僞元素
僞元素之是以被稱為僞元素,就是因為他們不是真正的頁面元素,html沒有與之對應的元素,但是其用法和表現行為和真正的元素一樣,是以被成為僞元素。
.clearfix::before{
content: ”;
display: table;
}
.clearfix 是給父元素增加的另外一個類名,這是我們推薦的解決辦法,既能解決margin-top塌陷問題,又不會出現其他附加的未知錯誤。
确定了解決方案以後,現在來看看最終的結果,如下圖:
可以看見,現在的位置是子元素相對于父元素在移動,而不會對父元素的位置造成什麼影響了。
下面附上調試代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>10-margin-top塌陷</title>
<style>
.clearfix::before{
content: '';
display: table;
}
.box{
width: px;
height: px;
background-color: gold;
margin:px auto;
}
.con{
width: px;
height: px;
background-color: green;
margin-top: px;
}
</style>
</head>
<body>
<div class="box clearfix">
<div class="con"></div>
</div>
</body>
</html>