儿童保证金不影响父母身高

jav*_*web 62 css

对于一些人来说这可能是显而易见的,但我发现很难找到解决方案.

答案的注意事项:请跳转到"真实的问题",谢谢:)

但我发现它 - 它低于问题的描述:

问题:

在像这样的简单示例中,子边距不会影响父高度

HTML

<div class="parent">
    <div class="child">Some text...</div>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS

.parent{ background: black; }
.child{
    background: LightBlue;
    margin: 20px;
}
Run Code Online (Sandbox Code Playgroud)

小提琴:http://jsfiddle.net/k1eegxt3/

解决方案:

非常简单,默认情况下,子边距一般不会影响父高度和父级维度,通过添加边距可以"推送"到父元素中的内容很容易修复,例如向父级添加填充或边框.

调整后的CSS:

.parent{ background: black; padding: 1px; /* PADDING ADDED */ }
.child{
    background: LightBlue;
    margin: 20px;
}
Run Code Online (Sandbox Code Playgroud)

小提琴:http://jsfiddle.net/fej3qh0z/

真正的问题:

然而,我实际上想知道为什么这样做是这样的,而不仅仅是如何修复,
所以请,有人可以写一个解释这种行为的答案,并添加一些DOC参考?

非常感谢 :)

Key*_*Six 79

它被称为折叠边距.来自www.w3.org的文件:

6.2.利润率下降

某些相邻的边距合并形成单一边际.这些利润被称为"崩溃".如果没有非空的内容,填充或边界区域或间隙将边缘区分开,则边距相邻.

有关示例的更多信息:http://www.w3.org/TR/css3-box/#collapsing-margins

您可以添加overflow: auto;到父元素以解决此问题.

小提琴:http://jsfiddle.net/k1eegxt3/2/

  • @ jave.web因此,空元素不会添加垂直边距空间,也不会平滑空间元素而无需重置边距. (4认同)
  • 太好了,但为什么会这样呢?是什么让css设计师制定这个规则? (2认同)
  • 哦,好吧,所以目的是让空元素无边际:)谢谢 (2认同)
  • 当滚动条不需要时@Faloude; `overflow:hidden`也可以解决问题.我是强迫滚动条(in)可见性的忠实粉丝,并且当它关于垂直边距时,它会转出`overflow-y:scroll`. (2认同)