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

为什么父元素不包含边距?

夏侯涵映
2023-03-14
问题内容

当具有边距的元素包含在另一个元素中时,父级不会始终包裹/包含该边距。

许多事情将导致父母控制孩子的保证金:

  • border: solid;
  • position: absolute;
  • display: inline-block;
  • overflow: auto;

(这只是经过一点测试,毫无疑问,还有更多。)

我认为这与利润下降有关,但是:

  1. W3C规范页面没有此类行为的描述。
  2. 这里没有重叠的边距。
  3. 在此问题上,所有浏览器的行为似乎都是一致的。
  4. 该行为受到与边距无关的触发器的影响。

根据逻辑,默认元素overflow: auto应包含与溢出设置为自动元素不同的材料?

为什么除了常规div的默认行为以外的所有内容都应假定边距由父级包含-为何常规默认值不包括边距?

编辑: 最终答案是W3C确实确实指定了此行为,但是:

  • 这些规范没有任何意义。
  • 规格混合,没有任何解释:
    • “免费保证金”(父级不包含会触及其父级顶部或底部的保证金)和
    • “折叠边距”(相邻的边距允许重叠)。

演示:

body {

  margin: 0;

}



div.block {

  background-color: skyblue;

}

div.inline-block {

  display: inline-block;

  background-color: lawngreen;

}

div.position-absolute {

  background-color: rgba(255,255,0,.7);

  position: absolute;

  bottom: 0;

  right: 0;

}

div.overflow-auto {

  background-color: hotpink;

  overflow: auto;

}

div.border {

  background-color: aquamarine;

  border: solid;

}



h2 {

  margin: 80px;

  width: 250px;

  border: solid;

}


<div class="block">

  <h2>Is the margin contained (block)?</h2>

</div>

<div class="inline-block">

  <h2>Is the margin contained (inline-block)?</h2>

</div>

<div class="position-absolute">

  <h2>Is the margin contained (position-absolute)?</h2>

</div>

<div class="overflow-auto">

  <h2>Is the margin contained (overflow-auto)?</h2>

</div>

<div class="border">

  <h2>Is the margin contained (border)?</h2>

</div>

问题答案:

这是CSS 根据W3C的工作方式:

在本规范中,“塌陷边距”一词是指两个或更多框(可能彼此相邻或嵌套)的相邻边距(没有非空内容,填充或边框区域,或间隙将它们隔开)组合形成一个单边距。

更具体地针对您的顶级div案例:

如果框的顶部和底部边距相邻,则边缘可能会塌陷。在这种情况下,元素的位置取决于其与其边距被折叠的其他元素的关系。

  • 如果元素的边距与父级的上边距折叠在一起,则框的顶部边框边缘将定义为与父级的相同。
  • 否则,要么元素的父级不参与边距崩溃,要么仅涉及父级的底边距。元素的顶部边框边缘的位置与元素的底部边框非零时的位置相同。

我能做的最好的事情是指向您指向站点上的“崩溃边际”(TommyOlsson和Paul O’Brien) 。他们用示例进行了 非常 详细的说明,这些示例向您精确显示了在示例示例代码中演示的行为。



 类似资料:
  • 问题内容: 当我使用Chrome开发人员工具检查定位标记的大小时,它会向我显示第一个元素和第二个元素。 我想知道为什么它不包含包含元素的高度和宽度以及它是如何计算的。 问题答案: 在CSS 2.1规范说 框内容区域的尺寸(内容宽度和内容高度)取决于几个因素:生成框的元素是否设置了“宽度”或“高度”属性,该框是否包含文本框或其他框,是否框是一个表格,等等。框的宽度和高度将在有关可视格式模型详细信息的

  • 问题内容: 我想问一下高度和漂浮物是如何工作的。我有一个外部div和一个内部div,其中包含内容。它的高度可能取决于内部div 的内容,但似乎我的内部div会溢出其外部div。正确的做法是什么? 问题答案: float大多数初学者都误解了该属性。好吧,到底是做float什么的?最初,float引入了该属性,以使文字围绕图像浮动left或浮动right。这是 @Madara Uchicha 的另一种

  • 问题内容: 我有一个( 父 )包含另一个( 子 )。Parent是第一个没有特定CSS样式的元素。当我设定 最终结果是我的孩子的顶部仍然与父母对齐。我的父母没有将孩子向下移动10px,而是将其向下移动10px。 我的设定为。 我在这里想念什么? 编辑1 我的父母需要具有严格定义的尺寸,因为它的背景必须从上到下显示(像素完美)。因此,在其上设置垂直边距是 不可行的 。 编辑2 此行为在FF,IE和C

  • 本文向大家介绍为什么float会导致父元素塌陷?相关面试题,主要包含被问及为什么float会导致父元素塌陷?时的应答技巧和注意事项,需要的朋友参考一下 “当元素设置浮动后,会自动脱离文档流”, 翻译成白话就是说,元素浮动后,就不在整个文档流的管辖范围,那么它之前存在在父元素内的高度就随着浮动不复存在了,而此时父元素会默认自己里面没有任何内容 (前提是未给父元素设置固定高度,如果父元素本身有固定高度

  • 问题内容: 我有一个包含2个div的页面。第一个浮动。第二个有一个“清晰:既有CSS声明,又有很大的利润空间”。但是,当我在Firefox或IE8中查看页面时,没有看到上边距。看起来第二个div正在触摸第一个div,而不是分开。有什么方法可以使上边距正常工作? 我已经阅读了CSS规范,并注意到它说:“由于浮动中没有浮动,因此浮动框之前和之后创建的未定位块框会垂直流动,就好像浮动不存在一样。”但是,

  • 我的API有很多db调用,因此我需要使用或处理几乎每个数据库调用,但是有没有比这更好的方法 每次我要从数据库中检索用户行时?