CSS:位置:固定在位置内部:固定

好的,我注意到了一些东西,但在CSS规范中找不到它。 使用position: fixed的元素的样式将相对于浏览器视口完全定位。 如果你把一个固定位置的元素放在另一个元素里面会发生什么 示例CSS的行:

 .fixed { position: fixed; width: 100px; height: 100px; background: red; } #parent { right 100px; padding: 40px; } .fixed .fixed { background: blue; } 

和HTML:

 <div id="parent" class="fixed"> <div class="fixed"> </div> </div> 

据我所知,这个元素是相对于其最近的父母也是固定的。 在所有的浏览器中都是可以的。 另外,这是一个错误,还是故意的行为?

到目前为止,我还没有在互联网上find关于这个主题的任何内容,只是“固定的位置使它坚持页面”。

固定和定位是两件不同的事情。 它们的位置与绝对定位的元素相同:相对于其包含的块 。 但是与绝对定位的元素相反,它们相对于视口仍然固定在该位置(即,当滚动时它们不移动):

http://www.w3.org/TR/CSS2/visuren.html#propdef-position

盒子的位置是根据“绝对”模型来计算的,但是盒子是相对于某个参考而固定的。

定位

包含块的定义如下 :

如果元素具有“位置:固定”,则在连续介质(…)的情况下通过视口build立包含块

如果元素具有“position:absolute”,那么包含块由最近的祖先build立,其“绝对”,“相对”或“固定”(…)

这表明虽然它们的定位algorithm是相同的(它们都是相对于它们的包含块定位的),但是固定元素的包含块总是视口,与绝对定位的元素相反,所以它们应该相对于而不是任何绝对或固定位置的元素。

事实上,事实确实如此。 例如,如果将top: 20px添加到.fixed ,则两个div都将位于视口顶部20像素处。 嵌套的固定div不会从其父项的顶部向下放置20个像素。

你在这种情况下没有看到的原因是你实际上没有设置任何左/上/右/下属性,所以它们的位置是由它们在stream中的位置决定的(它们的“ 静态位置 “),正如我的第一句话所说,是根据绝对模型完成的。

我不认为这是真正的意图。 具有固定位置的东西都是相对于窗口定位的,如果你有固定的另一个固定的孩子,你想要发生什么? 您可以轻松地复制行为,不仅可以分别固定两个固定元素,也可以使用其他位置来更改固定元素内的子元素的位置。 :d

我不认为有什么更多的这个w3c说什么:

生成一个绝对定位的元素,相对于浏览器窗口定位。 元素的位置用“左”,“顶”,“右”和“底部”属性指定

所以,如果你摆脱了“填充:40px;” 你会得到2个元素 – 1在另一个。

相同的效果,如果你把两个元素绝对放在顶部:0左:0与相同的父(身体)。