子元素相对于视区固定定位



是否有任何文档指定位置固定的元素的默认行为,在位置相对,绝对或静态的元素内?

.parent {
position: relative;  /* or absolute/static */
height: 200px;
width: 200px;
top: 30px;
left: 50px;
background-color: red;
}
.child {
position: fixed;
height: 100px;
width: 100px;
left: 10px;
top: 20px;
background-color: blue;
}
<div class='parent'>
<div class='child'></div>
</div>

我自己的经验是它相对于浏览器视口定位(除非使用 transform,或者在 child 中省略左/上(,但我如何证明这种情况应该总是如此?我怎么知道是否有任何浏览器以不同的方式呈现?也许相对于父级定位子元素,或者根本不显示元素......

当涉及到position:fixed时,父元素或任何祖先的位置无关紧要。从规范:

固定定位是绝对定位的一个子类别。唯一的区别是,对于固定定位的框,包含块由视口建立。

但是在一些特殊情况下,包含块可以更改。它发生在使用filter时,就像我在这里解释的那样,transform像这里解释的那样,有时will-change(解释在这里(


关于上/左/下/右的使用,您需要考虑静态位置。如果您没有设置任何这些值,浏览器将考虑放置元素的静态位置。仍然从规格:

就本节和下一节的目的而言,术语"静态位置"(元素的(大致是指元素在正常流动中的位置。更准确地说...

position:fixed元素始终将视区视为其包含块(其放置的引用(,除非在上层中使用了一些特定属性(转换、过滤器等(。该元素的位置由上/左/右/下定义,或由规范中描述的静态位置定义。

获取有关静态位置的更多详细信息的相关问题:为什么我的绝对定位元素没有位于我期望的位置?

最新更新