边距崩溃
当两个边距垂直相互接触时,它们会折叠。当两个边距水平接触时,它们不会折叠。
相邻垂直边距的示例:
考虑以下样式和标记:
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)。这种情况不会发生,因为边距会一起折叠形成一个边距。