css特性:空白外邊距互相疊加

來源:互聯網
上載者:User

空白雙邊距是一個極容易誤解的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/ 轉載請註明.

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.