空白雙邊距是一個極容易誤解的CSS特性.它不是CSS的bug,但如果我們一旦誤解,將會給你帶來很多麻煩.
先看如下demo代碼:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>空白邊距疊加demo@Mr.Think</title>
<style>
body{width:300px; font-family:'微軟雅黑'; font-size:1em; text-indent:10px; line-height:1.25}
div{background:#a40000;margin:10px}
div p{background:#eee;margin:15px}
</style>
</head>
<body>
<div><p>空白邊距疊加demo@Mr.Think</p></div>
</body>
</html>
這是一個div元素內嵌套p的簡單範例,先別複製儲存為html測試,在你看完上面的代碼後,你是否以為它出為你呈現如的效果?
好,現在你可以複製上面代碼,儲存到本地,然後在瀏覽器中開啟.你會驚訝的發現,它呈現給你的效果是這樣的:
為什麼會這樣呢?按CSS中,對於有塊級子項目的元素計算高度的方式,如果元素沒有垂直邊框和填充,那其高度就是其子項目頂部和底部邊框邊緣之間的距離.故,子項目的頂部和底部空白邊就突出到元素的外圍了.p元素的15px外邊距與div元素的10px的外邊距形成一個單一的15px垂直空白邊,另外,形式的這個空白邊並非為div所包圍,而是呈現在div的外圍.所以,我們看到了第二張.
如何解決?本人比較推薦兩種解決方式:
其一,為外圍元素定義透明邊框.具體到本例,即在樣式div中加入border:1px solid transprent;
其二,為外圍元素定義內邊距填充..具體到本例,即在樣式div中加入padding:1px
另外,還可以通過外圍元素絕對位置,或者定義子項目浮動等方式實現.
原文發佈於Mr.Think的部落格:http://mrthink.net/css-margin-overlying-way/ 轉載請註明.