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

<div>placeholder</div>
&#13;
答案 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。如果含有的高度 未明确指定块(即,它取决于内容 高度),这个元素并不是绝对定位的值 计算'自动'。