我认为一个普遍的规则是,只要div foo
有position: relative
,那么如果父母和祖先都没有任何非静态的position
(所以需要有relative, absolute, or fixed
之一),那么div foo
现在将位置相对于整个文档。为什么div的“位置:绝对”不是相对于文档默认的?
但在以下页面:
<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
(默认),并且是实际上相对于集装箱分区。只有当top
设置为0
,0px
或其他某个值时,它才是相对于文档。什么规则管理呢?
P.S.与规范中的规则,我没有看到一条规则说:如果没有指定top
或left
,那么行为就是这样和那样的。所以这是一个事实上的标准,如果没有指定,那么如果没有“包含块”(它被定义为非静态定位块),那么它将不会相对于“初始块”?
可能的重复[绝对位置,但相对于父母](http://stackoverflow.com/questions/10487292/position-absolute-but-relative-to-parent) – Curt 2013-02-27 12:02:15
什么规则管理呢? [牛顿第一定律](http://en.wikipedia.org/wiki/Newton%27s_laws_of_motion#Newton.27s_first_law) – 2013-02-27 12:05:48
关于你的编辑,我编辑了我自己的答案来引用这个:http://www.w3.org/ TR/CSS21/visuren.html#COMP-abspos。这里规范宽泛地提到如果没有定位元素在附近,元素应该相对于其容器定位。我想这只适用于价值是'自动',但我不认为它提到,它应该只适用于此。如果指定了一个值,正如你所提到的那样,它似乎将自己定位到文档。 – 2013-02-27 12:22:00