【问题标题】:Why doesn't a child's margin affect a parent's height?子边距不影响父高度
【发布时间】:2015-03-05 22:13:03
【问题描述】:

这对某些人来说可能很明显,但我发现很难找到解决方案。

答题者须知:请跳至“真正的问题”,谢谢 :)

但我找到了——它在问题描述的下方:

问题:

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

HTML

<div class="parent">
    <div class="child">Some text...</div>
</div>

CSS

.parent{ background: black; }
.child{
    background: LightBlue;
    margin: 20px;
}

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

解决办法:

非常简单,默认情况下,子边距通常不会影响父高度和父尺寸,它很容易通过在父元素中添加边距可以“推”到的东西来解决,例如为父级添加内边距或边框。

调整后的 CSS:

.parent{ background: black; padding: 1px; /* PADDING ADDED */ }
.child{
    background: LightBlue;
    margin: 20px;
}

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

真正的问题:

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

非常感谢:)

【问题讨论】:

  • 你的意思是collapsing margins?
  • @j08691 好吧,这只是更多地说明问题何时会发生以及如何解决,并没有真正解释,但谢谢:)
  • 您应该阅读该页面底部的链接。

标签: css


【解决方案1】:

称为折叠边距。来自 www.w3.org 的文档:

6.2。折叠边距

某些相邻的边距组合成一个边距。那些 边距被称为“崩溃”。如果没有边距相邻 非空内容、填充或边界区域或间隙分离 他们。

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

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

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

【讨论】:

  • 很好,但为什么会这样呢?是什么让 css 设计师制定了这条规则?
  • @jave.web 这样空元素就不会添加垂直边距空间,也可以均匀地间隔元素而不需要重置它们的边距。
  • 哦,好的,所以目的是使空元素无边距:) 谢谢
  • 我一直在寻找这个解决方案。非常感谢。它工作!
  • @Faloude 不需要滚动条; overflow: hidden 也能做到这一点。我非常喜欢强制滚动条(不可见)可见性,事实证明overflow-y: scroll 在垂直边距方面也可以工作。
【解决方案2】:

添加显示:flex;到父元素调整 flex 方向,根据需要对齐和对齐,但边距会根据需要显示。

【讨论】:

  • 通常情况下,最好添加一个实际的代码 sn-p 而不是将代码作为解释的一部分。答案编辑器有很多格式选项,用于显示代码并将其与答案分开。
  • 同意,但是复制代码而不是试图找出它背后的东西并不是一个好主意,搜索和挣扎会有更好的结果
猜你喜欢
  • 2013-06-12
  • 2014-08-19
  • 1970-01-01
  • 2013-01-08
  • 1970-01-01
  • 2014-12-20
  • 2016-01-25
  • 1970-01-01
  • 2014-01-08
相关资源
最近更新 更多