子元素margin-top為何會影響父元素?

問題如下

一段很簡單的代碼:

css如下:


html結構如下


當在crystal沒有設置margin-top時,瀏覽器顯示如預期

設置了margin-top后出現(xiàn)了如下所示的現(xiàn)象:



我們并沒有給外層的div設置margin-top,但是還是距離瀏覽器最頂部產(chǎn)生了50px的間距,查看這50px間距屬于哪個元素,會發(fā)現(xiàn)外層div的margin依然是0 auto; 所以這個margin還是屬于h2,為什么會這樣?

來看css2.1盒模型中規(guī)定的內(nèi)容:


因為嵌套也屬于毗鄰,所以在樣式表中優(yōu)先級更高的.show h2的margin覆蓋了之前外層div定義的margin,導致最終整個div產(chǎn)生10px的間距。

若給h2也添加一個class,并且在.show之前定義,則最終結果如第一個圖所示,最終margin顯示為0;

解決辦法:

1. 父級或子元素使用浮動或者絕對定位absolute

浮動或絕對定位不參與margin的折疊

2. 父級overflow:hidden;

3. 父級設置padding(破壞非空白的折疊條件)

4. 父級設置border

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 14,156評論 1 92
  • 問題描述: 最近在開發(fā)中偶然遇到了一個問題那就是如下圖:父級元素是個空的最外層包裹元素,子元素是內(nèi)容,想控制子元素...
    口口雨山閱讀 1,172評論 0 0
  • 本課來自http://www.imooc.com/learn/9請不要用作商業(yè)用途。 HTML5 HTML介紹 H...
    PYLON閱讀 3,450評論 0 5
  • 一 外部式css樣式 (也可稱為外聯(lián)式)就是把css代碼寫一個單獨的外部文件中,這個css樣式文件以“.css...
    KunMitnic閱讀 1,120評論 0 1
  • 目錄 背景 margin負值的原理2.1 基于參考線的原理圖2.2 實際demo2.2.1 margin-left...
    流云家的夢溪閱讀 1,062評論 0 1

友情鏈接更多精彩內(nèi)容