【发布时间】:2013-02-27 11:58:44
【问题描述】:
我认为一个通用规则是,每当一个 div foo 有 position: relative,那么如果父级和祖先都没有任何非静态 position(所以需要有一个 relative, absolute, or fixed),然后,div foo 现在将相对于整个文档的位置。
但在以下页面中:
<div id="box1"></div>
<div id="box2">
<div id="box3">some text inside some text</div>
</div>
<style>
#box1 { width: 300px; height: 100px; background: #ffd; margin-left: 60px }
#box2 { width: 300px; height: 100px; background: #fa0; margin-left: 60px }
#box3 { width: 100px; height: 80px; background: #af0; position:
absolute; left: 20px; }
</style>
box3 实际上的行为是这样的:left 是 20px 并且相对于文档,但 top 是 auto(默认情况下),实际上是相对于 容器div。只有当top 设置为0、0px 或其他值时,它才相对于文档。这是什么规则?
P.S. 使用规范中的规则,我没有看到这样的规则:如果未指定 top 或 left,则行为是这样那样的。所以这是一个事实上的标准,如果不指定,那么如果没有“包含块(定义为非静态定位块),那么它就不会相对于“初始块”?
【问题讨论】:
-
这是什么规则? Newton's First Law
-
关于您的编辑,我编辑了自己的答案以引用此:w3.org/TR/CSS21/visuren.html#comp-abspos。在这里,规范松散地提到了如果附近没有定位元素,则该元素应相对于其容器进行定位。我想这仅适用于值为
auto时,但我不相信它提到它应该只适用于那时。如果指定了一个值,正如您所提到的,它似乎将自己定位到文档中。
标签: css