【问题标题】:Calculation of Containing Box's Height and Collapsing Margins [closed]计算包含框的高度和折叠边距[关闭]
【发布时间】:2023-03-13 21:11:01
【问题描述】:

当一个包含框的顶部margin与其第一个孩子的顶部margin折叠时,如何计算包含框的height(示例中为div)?

举个简单的例子:

div {
  margin: 40px 0 25px 0;
  background: yellowgreen;
  /*   border:1px solid black; */
}
p {
  margin: 20px 0 20px 0;
  background: lightgreen;
  padding: 10px;
}
<div>
  <p>Paragraph content</p>
</div>

p 是与div 合并的边距,因此我们看不到div 的背景颜色。将border 添加到div 可以阻止边距折叠。

但是,因为 pmargin 也是 divmargin ,这意味着 div 不再完全包含 p。这是违反直觉的。

我浏览了Calculating heights and margins 规范和Collapsing margins 并找不到如何计算heightdiv。因为无法确定pheight

【问题讨论】:

  • 很不清楚你问的是什么。 如何计算包含框的高度是什么意思?
  • @LGSon 是的,OP 必须停止编辑值,否则答案会被破坏:/
  • @LGSon 如何计算div的高度
  • 这里很好地描述了发生了什么:developer.mozilla.org/en-US/docs/Web/CSS/CSS_Box_Model/…
  • @dippas 我认为你的回答很好,所以取消删除它并在我上面的评论中添加链接以获取折叠边距描述。还有一个关于字体大小/行高未设置时的注释,使用浏览器默认值,在这种情况下可以给出不同的输出/大小的div

标签: html css margin


【解决方案1】:

在这种情况下,div 将具有与 p 相同的 height,因为 collapsing margins(除了 padding

您可以通过计算font-size * line-height 知道ps height,在您的情况下是:

font-size: 16px * line-height:1.25 = 20px

所以,

  • pheight:20px
  • div,由于p 有一个额外的10pxpadding,它会让 它是height:40px

body {
  margin: 0
}
div {
  margin: 40px 0 25px;
  background: red;
  /*   border:1px solid black; */
}
p {
  margin: 20px 0;
  background: lightgreen;
  padding: 10px
}
<div>
  <p>Paragraph content</p>
</div>

参见:

注意:(作者@LGSon)

font-size/line-height未设置时,使用浏览器默认值,在这种情况下可以给div不同的输出/大小

【讨论】:

  • “在这种情况下,div 将与 p 具有相同的高度”我找不到任何关于此的规范。我使用 DevTool 进行检查,它们确实具有相同的高度。
  • 为什么div的高度不是p的高度+边距?
  • 因为边距正在折叠
猜你喜欢
  • 1970-01-01
  • 2021-03-11
  • 2015-01-19
  • 2012-11-07
  • 2014-07-23
  • 2023-04-01
  • 1970-01-01
  • 2018-12-12
相关资源
最近更新 更多