邊距崩潰

當兩個邊距垂直相互接觸時,它們會摺疊。當兩個邊距水平接觸時,它們不會摺疊。

相鄰垂直邊距的示例:

考慮以下樣式和標記:

div{
    margin: 10px;
}
<div>
    some content
</div>
<div>
    some more content
</div>

它們相距 10px,因為垂直邊距會在一個和另一個上方崩潰。 (間距不是兩個邊距的總和。)

相鄰水平邊距的示例:

考慮以下樣式和標記:

span{
    margin: 10px;
}
<span>some</span><span>content</span>

它們相距 20px,因為水平邊距不會在一個和另一個上崩潰。 (間距將是兩個邊距的總和。)

重疊不同的尺寸

.top{
    margin: 10px;
}
.bottom{
    margin: 15px;
}
<div class="top">
    some content
</div>
<div class="bottom">
    some more content
</div>

這些元素將垂直間隔 15px。邊距儘可能多地重疊,但較大的邊距將決定元素之間的間距。

重疊利潤率

.outer-top{
    margin: 10px;
}
.inner-top{
    margin: 15px;
}
.outer-bottom{
    margin: 20px;
}
.inner-bottom{
    margin: 25px;
}
<div class="outer-top">
    <div class="inner-top">
        some content
    </div>
</div>
<div class="outer-bottom">
    <div class="inner-bottom">
        some more content
    </div>
</div>

這兩個文字之間的間距是多少? (懸停看答案)

間距為 25px。由於所有四個邊距相互接觸,它們將會崩潰,因此使用四個邊緣中的最大邊距。

現在,如果我們在上面的標記中新增一些邊框,那該怎麼辦呢?

div{
    border: 1px solid red;
}

這兩個文字之間的間距是多少? (懸停看答案)

間距為 59px! 現在只有 .outer-top 和 .outer-bottom 的邊距相互接觸,並且是唯一的摺疊邊距。剩餘的邊距由邊框分隔。所以我們有 1px + 10px + 1px + 15px 的 + 20px + 1px + 25px + 1px。 (1px 是邊界……)

摺疊父元素和子元素之間的邊距:

HTML:

<h1>Title</h1>
<div>
  <p>Paragraph</p>
</div>

CSS

h1 {
  margin: 0;
  background: #cff;
}
div {
  margin: 50px 0 0 0;
  background: #cfc;
}
p {
  margin: 25px 0 0 0;
  background: #cf9;
}

在上面的示例中,僅適用最大的邊距。你可能已經預期該段落將位於距離 h1 60px 處(因為 div 元素的邊距頂部為 40px 而 p 的邊距為 20px)。這種情況不會發生,因為邊距會一起摺疊形成一個邊距。