margin-top失效傳遞給父元素解決方案

antzone發表於2017-04-06

可能在有些時候,大家會遇到這樣的情況,那就是給子元素設定的上外邊距會傳遞給父元素。

先看一段程式碼例項:

[HTML] 純文字檢視 複製程式碼
<!DOCTYPE html>
<html>
<head>
<meta charset=" utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>螞蟻部落</title>
<style type="text/css">
#box {
  width:200px;
  height:100px;
  background:#ccc;
}
#inner {
  width:100px;
  height:50px;
  background:blue;
  margin-top:20px;
}
</style>
</head>
<body>
<div id="box">
  <div id="inner"></div>
</div>
</body>
</html>

上面的程式碼在IE8和IE8以上瀏覽器還有其他標準瀏覽器中,都會將子元素的上外邊距傳遞給父元素。

根據規範,一個盒子如果沒有上內邊距和上邊框,那麼它的上邊距應該和其文件流中的第一個孩子元素的上邊距重疊。

解決方法非常簡單,那就是反其道而行之,比如設定上內邊距或者上邊框,或者觸發BFC

程式碼例項如下:

[HTML] 純文字檢視 複製程式碼
<!DOCTYPE html>
<html>
<head>
<meta charset=" utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>螞蟻部落</title>
<style type="text/css">
#box {
  width:200px;
  height:100px;
  background:#ccc;
  border-top:1px solid red;
}
#inner {
  width:100px;
  height:50px;
  background:blue;
  margin-top:20px;
}
</style>
</head>
<body>
<div id="box">
  <div id="inner"></div>
</div>
</body>
</html>

上面的程式碼解決了margin-top失效問題,當然使用何種方式解決要看實際情況,你不能客戶要求不能有上邊框,你非要加上一個上邊框,可選擇的方式還是很多的。

相關文章