這是一個早之前研究過的東西,今天java開發提及了這個,順帶記錄一下。 這裏有一行代碼,很簡單的一段代碼css
<style type="text/css"> #div1{ background:#000; width:100px; height:100px; margin-top:10px; } #div2{ margin-top:20px; background:#f00; width:50px; height:50px; } </style>
<div id="div1">
<div id="div2"></div>
</div>
複製代碼
但是在瀏覽器中打開後,竟然是這個樣子的~html
( 黑色的區塊爲div1,紅色的爲div2 )java
從效果上看div2的margin-top像是沒有生效,經測量div1的margin-top值,發現這個div2的margin-top像是生效到div1上了。git
就這幾行代碼寫錯是不大可能,那這又是怎麼回事?github
以前遇到這個問題時,試遍了全部的瀏覽器,都是這個樣子;我就覺着這是個兼容性極佳的BUG。瀏覽器
後來一個偶然的機會發如今父級上增長border或者overflow:hidden是能夠規避這個問題,且這個問題只會在常規流向中出現,也就是說用position或者是float都不會存在這個問題。佈局
整點原理規範什麼的提升一下;百度一下,你就知道。。spa
在本規範中,表述邊距重合意味着兩個或多個框(可能相鄰也可能嵌套)的相鄰的邊距(其間沒有邊白或邊框間隔)重合在一塊兒而造成一個單一的邊距。 CSS2中,水平邊距永遠不會重合。code
首先了解到這並非BUG,而是個規範,雖然看上去像是BUG 按着規範試一下,覺着仍是像是個BUG。cdn
看規範是一目十行,過目就忘,仍是整理一下。
另推薦個表格組件gridManager