24

只是无法弄清楚这套巧妙的规则何时会有所帮助。当您将不同的布局组合在一起时,它们打破了盒子模型的简单性并提供了无限的麻烦来源。那么是什么原因呢?

参考规则

更新:规则对于兄弟元素来说是非常合乎逻辑的,但是为什么边距应该传播到父元素直到树?解决了什么样的问题?

例如:

<div style="margin: 20px; background-color: red;">
    <div style="margin: 20px;">
        <p style="margin: 100px;">red</p>
    </div>
</div>
<div style="margin: 20px; background-color: blue;">blue</div>

顶级 div 彼此间隔 100 像素。

4

3 回答 3

18

在您意识到替代方案没有意义之前,这是没有真正意义的情况之一。

您可能知道,边距指定元素之间的距离,它不是围绕每个元素的“外部填充”。如果两个边距为 20px 的元素彼此相邻,则它们之间的距离是 20px,而不是 40px。

由于边距是到另一个元素的距离,因此距离是从元素到周围元素的距离,而不是到父元素的边界。

如果将边距计算到父元素的边界,则将元素放入元素中div会在元素之间引入额外的间距,即使它div本身没有边距或填充。如果在元素周围添加无样式元素,则元素周围的边距应该保持不变div

于 2009-09-17T11:28:27.803 回答
4

什么时候有用?

最简单的例子:段落和标题的列表,每个都带有margin-topmargin-bottom。您需要在文章的顶部和底部以及不同元素之间留有边距。

使用边距折叠,您无需在第一个或最后一个项目上设置特殊边距(不是原始 CSS 规范的一部分!)或填充容器。

但我同意,总的来说,这是一个毫无意义的功能。

于 2009-09-17T11:43:30.890 回答
3

考虑包含多个段落的正文。您希望每个段落以 2em 分隔,并且您希望第一段与前面的内容分隔 2em,最后一段与后面的内容分隔 2em。

这可以通过以下 CSS 轻松完成,因为分隔段落的顶部和底部边距将折叠:

p {
    margin-top: 2em
    margin-bottom: 2em;
}

如果边距没有折叠,这将导致边距被 4em 的空间分隔,而不是 2em。如果没有边距折叠,达到预期效果的唯一方法是为第一段和最后一段设置一些额外的规则,这将涉及给它们一个类或 id(如果文本被更改,则必须保持) ,或者将它们包装在一个不必要的额外元素中并使用 :first-child 和 :last-child ,或者......好吧,你明白了。

我可以保证,如果没有发生边距折叠,那么会有很多重复的问题要求解决方法以实现上述规则提供的一致间距:-)

于 2009-09-17T11:44:03.623 回答