当前位置: 首页 > 面试题库 >

为什么CSS中的边距/填充百分比总是按宽度计算?

南宫建白
2023-03-14
问题内容

如果您查看CSS盒模型规范,将会观察到以下内容:

[margin]百分比是相对于所生成的盒子的包含块的 宽度 来计算的。 请注意,“ margin-top”和“ margin-
bottom”也是如此。
如果包含块的宽度取决于此元素,则结果布局在CSS 2.1中未定义。 (强调我的)

确实是这样。但是 为什么
呢?到底什么会迫使任何人以这种方式设计它?很容易想到您想要的场景,例如,某件事总是比页面顶部低25%,但是很难提出您希望垂直填充相对于水平尺寸相对的任何原因。父母。

这是我所指现象的一个示例:

<div style="border: 1px solid red; margin: 0; padding: 0; width: 200px; height: 800px;">
  This div is 200x800.
  <div style="border: 1px solid blue; margin: 10% 0 0 10%;">
    This div has top-margin of 10% and left-margin of 10% with respect to its parent.
  </div>
</div>

问题答案:

将我的评论转为答案,因为这是合乎逻辑的。但是,请注意,这是没有根据的推测。为何以这种方式编写规范的实际原因在技术上仍然未知。

元素高度由子代的高度定义。如果一个元素的padding-
top为:10%(相对于父级高度),则将影响父级的高度。由于孩子的身高取决于父母的身高,而父母的身高则取决于孩子的身高,所以我们的身高可能会不正确,或者会无限循环。当然,这仅会影响offset
parent === parent,但仍然如此。这是一个很难解决的奇怪情况。

更新:最后两句话可能并不完全准确。叶元素(没有子元素的子元素)的高度会影响其上方所有元素的高度,因此会影响许多不同的情况。



 类似资料:
  • 问题内容: 使用HTML / CSS,如何制作宽度和/或高度为其父元素的100%并且仍然具有适当的填充或边距的元素? 所谓“适当的”我的意思是,如果我的父元素是高大的,我指定用我所期望的,我应该得到一个高的元素与所有各方,很好地集中在父元素。 现在,我知道这不是标准盒模型指定它应该工作的方式(尽管我想确切地知道为什么),所以显而易见的答案不起作用: 但是在我看来,必须有某种方法可以可靠地为任意大小

  • 问题内容: 我一直在绞尽脑汁使用以下命令在CSS中创建垂直对齐方式 尽管这似乎适用于这种情况,但令我感到惊讶的是,当我增加或减小基本div的宽度时,垂直对齐方式会对齐。我期望当我设置padding- top属性时,会将填充值作为父容器高度的百分比(在我们的示例中为基数),但是上述50%的值是按宽度。:( 有没有一种方法可以将填充和/或边距设置为高度的百分比,而无需使用JavaScript? 问题答

  • 问题内容: 如果我设置任何元素,然后将,,, 不是该元素的影响? 是否有必要使用或或使用,,,该元素吗? 问题答案: 有关完整说明,请参见CSS规范中的“ 内联格式设置上下文”。 基本上可以在行内元素上设置边距,内边距和边框,但是它们的行为可能不符合您的预期。如果只有一行,则该行为可能会很好,但是同一流中的其他行可能会表现出与您期望的行为不同的行为(即,将不考虑填充)。此外,如果内嵌框包含易碎元素

  • 问题内容: 我想在flexbox中有一个Square div。所以我用: 在Chrome中可以正常使用。但是在Firefox中,父级只压缩一行。 如何在Firefox中解决此问题?我使用版本44。 问题答案: 更新 flexbox规范已更新。 4.2。 Flex项目边距和填充 弹性项目(如方块框上的项目)的边距和填充百分比将根据其包含的块的内联大小进行解析,例如,在水平书写模式下,左/右/上/下百

  • 问题内容: 似乎在IE中,宽度包括填充大小。而在FF中,宽度没有。如何使两者的行为相同? 谢谢。 问题答案: IE曾经使用更方便但非标准的 “边框” 框模型。在此模型中,元素的宽度包括填充和边框。例如: 会很宽。 相反,所有违反标准的浏览器都默认使用 “内容框” 框模型。在此模型中,元素的宽度 不 包括填充或边框。例如: 实际上将是宽的:+ 每边填充,+ 每边边框。 如果您使用具有有效标记,良好d

  • 问题内容: 我有这个标题栏。 我需要searchBar来填补div中剩余的空白。我该怎么做? 这是我的CSS 问题答案: 您可以使用CSS表格单元格实现此布局。 稍微修改您的HTML,如下所示: 只需删除两个元素周围的wrapper 元素即可。 应用以下CSS: 适用于并给它100%的宽度。 对于,,,适用。 对于,将宽度设置为90%,这将迫使所有其他元素计算出缩小以适合的宽度,搜索栏将展开以填充