【问题标题】:Why does height 100% work on absolutely positioned element?为什么高度 100% 对绝对定位的元素起作用?
【发布时间】:2017-03-08 13:47:29
【问题描述】:

据我所知,要以百分比形式工作,容器元素必须具有提到的特定高度。但这不适用于祖先相对定位的绝对定位元素。这是我的意思的一个工作示例:

.container {
  width: 400px;
  background: cyan;
  text-align: right;
  position: relative;
  color: white;
}

.child {
  width: 90%;
  height: 100%;
  background: blue;
}

.absolute {
  position: absolute;
}

.second {
  margin-top: 30px;
}
<div class="container">
  <div class="child absolute">Absolute</div>
  one <br> two <br> three <br> one <br> two <br> three <br>
</div>
<div class="container second">
  <div class="child">Static</div>
  one <br> two <br> three <br> one <br> two <br> three <br>
</div>

如您所见,绝对放置的 div 应用了 100% 的高度,而不是静态放置的 div。为什么?

【问题讨论】:

  • 您的child 元素,因为您没有描述position,默认情况下它是position: static;。要计算您的height: 100%;,父元素应该定义一个height,但它没有。在这种情况下,浏览器不会修改/计算其子项的高度,如果它们不是绝对定位的(因此它们将显示与其内容的大小相匹配)。 position: absolute; 的情况不同,因为它是在渲染父元素之后计算的。

标签: html css css-position


【解决方案1】:

来自 MDN

相对 这个关键字布局所有元素,就好像元素没有定位一样,然后调整元素的位置,而不改变布局(因此在没有定位的元素上留下一个间隙)。 position:relative 对 table-*-group、table-row、table-column、table-cell 和 table-caption 元素的影响是不确定的。

Read more。描述得很好。

【讨论】:

  • 这如何暗示绝对定位的元素将正确应用高度百分比?
  • 是的,但永远记住——绝对定位是指他的父元素。来自 MDN:“不要为项目留出空间。相反,将其放置在相对于其最近定位的祖先的指定位置(如果有),或者相对于初始包含块。”
【解决方案2】:

Here 是一本关于不同职位类型的好书:

Absolute 是相对于父元素而言的,不受其他元素影响,会从页面流中移除,即您可以看到一、二、三不受影响的列表。

它的高度是 .child 指定的 100%。

【讨论】:

  • 我阅读了 csstricks 文章。它只解释了 css 定位,但没有说明为什么绝对定位的元素会以百分比表示高度,而静态定位的元素则不会。
  • this 文章的“包含块的定义”部分有帮助吗?
  • 有点。这部分似乎暗示了可观察到的效果:如果未明确指定包含块的高度(即,它取决于内容高度),并且该元素不是绝对定位,则该值计算为“自动”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-08
  • 1970-01-01
相关资源
最近更新 更多