为什么百分比高度适用于位置固定元素?

时间:2015-07-09 01:58:06

标签: html css

我已经了解到百分比高度仅在父(和父母)元素都设置了height时才有效。但是为什么position:fixed元素不需要这样做。



div {
    position: fixed;
    width: 50%;
    height: 100%;
    background: silver;
}

<div>placeholder</div>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:6)

position: fixed相对于屏幕的视口而忽略父元素的定位。

https://developer.mozilla.org/en-US/docs/Web/CSS/position

  

<强>固定

     

不要为元素留出空间。相反,将其放置在相对于屏幕视口的指定位置,并且在滚动时不要移动它。打印时,将其放在每页的固定位置。

答案 1 :(得分:2)

通常,如果父级有height: auto,则height百分比不起作用。

这是因为height百分比是根据containing block的高度来解决的。但是如果建立包含块的块祖先具有height: auto,则其高度将是其内容的高度。

这将是一个循环定义,因此百分比被视为auto

但是,使用absolute positioning(包括fixed one)可以避免此问题。绝对定位的元素被out-of-flow,因此它们对具有height: auto的块祖先的高度没有影响。在这种情况下,它不再是循环定义,因此它可以工作。

spec

中对此进行了解释
  

百分比是根据高度来计算的   生成的框containing block。如果含有的高度   未明确指定块(即,它取决于内容   高度),这个元素并不是绝对定位的值   计算'自动'。