白雙邊距是一個極容易誤解的CSS特性.它不是CSS的bug,但如果我們一旦誤解,將會給你帶來很多麻煩.
先看如下demo代碼:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>空白邊距疊加[email protected]</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>空白邊距疊加[email protected]</p></div>
</body>
</html>
這是一個div元素內嵌套p的簡單樣例,先別復制保存為html測試,在你看完上面的代碼後,你是否以為它出為你呈現如下圖的效果?
好,現在你可以復制上面代碼,保存到本地,然後在浏覽器中打開.你會驚訝的發現,它呈現給你的效果是這樣的:
為什麼會這樣呢?按CSS中,對於有塊級子元素的元素計算高度的方式,如果元素沒有垂直邊框和填充,那其高度就是其子元素頂部和底部邊框邊緣之間的距離.故,子元素的頂部和底部空白邊就突出到元素的外圍了.p元素的15px外邊距與div元素的10px的外邊距形成一個單一的15px垂直空白邊,另外,形式的這個空白邊並非為div所包圍,而是呈現在div的外圍.所以,我們看到了第二張效果圖.
如何解決?本人比較推薦兩種解決方式:
其一,為外圍元素定義透明邊框.具體到本例,即在樣式div中加入border:1px solid transparent;
其二,為外圍元素定義內邊距填充..具體到本例,即在樣式div中加入padding:1px
另外,還可以通過外圍元素絕對定位,或者定義子元素浮動等方式實現.