出于什么原因在CSS中引入了保证金折叠规则?

act*_*ual 19 css margin collapse

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

参考规则.

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

例如:

<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>
Run Code Online (Sandbox Code Playgroud)

顶级div相互间隔100px.

Guf*_*ffa 17

这是在你意识到替代品变得不那么有意义之前它没有真正意义的情况之一.

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

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

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

  • 实际上,我更喜欢它的清晰度.虽然我同意在某些情况下保证金崩溃有所帮助 (8认同)
  • 对于兄弟元素来说,这是合乎逻辑的.但我仍然不知道为什么儿童元素的边缘会影响父元素的边缘. (5认同)
  • 我无法让自己将折叠边距的当前行为视为合乎逻辑的行为,因此就我而言,如果顶部元素上有边距,下方元素上有边距,并且这些边距合并为单个边距,即忽略这些边距之一。我知道你在说什么并且它是正确的,我只是不同意边缘崩溃的行为。就像我说的,这听起来像是 Microsoft Word 会做的事情,而不是 W3C。 (3认同)
  • @Magne:是的.这就是为什么崩溃的利润有点混乱.它只影响无样式div的大小,子元素之间的间距相同,有或没有没有样式的父元素.如果你有两个没有样式的div,并且子元素具有边距,你就会明白为什么父母不能占用孩子边缘的空间,因为那时父元素必须重叠. (2认同)