css知識點之子元素margin-top為何會影響父元素?

首先先貼一段代碼

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        * {
            margin: 0px;
            padding: 0px;
        }
        .box {
            width: 300px;
            height: 300px;
            background-color: #d6d6d6;
        }
        .box1 {
            width: 100px;
            height: 100px;
            border: 3px solid red;
            background-color: green;
            margin-top: 20px;
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="box1"></div>
    </div>
</body>
</html>

然后看下代碼實現的效果,

可以看到,我們給子元素的margin-top并沒有起到作用,并且作用在了父元素的身上,這是什么原因呢?下面我們來分析一下:

這是CSS 外邊距合并的原因,外邊距合并指的是,當兩個垂直外邊距相遇時,它們將形成一個外邊距。合并后的外邊距的高度等于兩個發生合并的外邊距的高度中的較大者。

  • 也就是說當一個元素出現在另一個元素上面時,第一個元素的下外邊距與第二個元素的上外邊距會發生合并。
  • 當一個元素包含在另一個元素中時(假設沒有內邊距或邊框把外邊距分隔開),它們的上和/或下外邊距也會發生合并。

注釋: 只有普通文檔流中塊框的垂直外邊距才會發生外邊距合并。行內框、浮動框或絕對定位之間的外邊距不會合并。

那么怎么解決這個問題呢,筆者測試了幾個方法,有如下5種解決方式:

  1. 修改父元素的高度,增加padding-top樣式模擬(padding-top:1px;常用);
  2. 為父元素添加overflow:hidden;樣式即可;
  3. 為父元素或者子元素聲明浮動(float:left;);
  4. 為父元素添加border(border:1px solid transparent;)
  5. 為父元素或者子元素聲明絕對定位;
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,784評論 1 92
  • 學習CSS的最佳網站沒有之一 http://www.w3school.com.cn/tags/index.asp ...
    Amyyy_閱讀 1,081評論 0 1
  • 1.塊級元素和行內元素 塊級(block-level)元素;行內(內聯、inline-level)元素。 塊元素的...
    饑人谷_小侯閱讀 2,036評論 1 4
  • 基本框 CSS假定每個元素都會生成一個或多個矩形框,這稱為元素框。各元素框中心有一個內容區(content are...
    exialym閱讀 785評論 0 2
  • 1.在什么場景下會出現外邊距合并?如何合并?如何不讓相鄰元素外邊距合并?給個父子外邊距合并的范例 概念:在CSS當...
    饑人谷_任磊閱讀 670評論 0 3