我正在尝试修复 div
所以它总是粘在屏幕顶部,使用:
position: fixed;
top: 0px;
right: 0px;
但是, div
位于居中的容器内。当我使用 position:fixed
时,它会修复 div
相对于浏览器窗口,例如它位于浏览器的右侧。相反,它应该相对于容器固定。
我知道 position:absolute
可用于修复相对于 div
的元素,但是当您向下滚动页面时,该元素会消失并且不会像 position:fixed
。
是否有破解或解决方法来实现这一目标?
原文由 Zach Nicodemous 发布,翻译遵循 CC BY-SA 4.0 许可协议
简短的回答:没有。 (现在可以使用 CSS 转换。请参阅下面的编辑)
长答案:使用“固定”定位的问题在于它会使元素 失去流动。因此它不能相对于其父级重新定位,因为它就好像它没有一个。但是,如果容器具有固定的已知宽度,则可以使用以下内容:
http://jsfiddle.net/HFjU6/1/
编辑(03/2015):
这是过时的信息。现在可以借助 CSS3 变换的魔力将动态大小的内容(水平和垂直)居中。同样的原则也适用,但您可以使用
translateX(-50%)
,而不是使用边距来抵消您的容器。这不适用于上述边距技巧,因为您不知道要偏移多少,除非宽度固定并且您不能使用相对值(例如50%
),因为它将相对于父元素而不是它所应用的元素。transform
行为不同。它的值是相对于它们所应用的元素的。因此,50%
fortransform
表示元素宽度的一半,而50%
for margin 是父元素宽度的一半。这是一个 IE9+ 解决方案使用与上述示例类似的代码,我使用完全动态的宽度和高度重新创建了相同的场景:
如果你想让它居中,你也可以这样做:
演示:
jsFiddle:仅水平居中
jsFiddle:水平和垂直居中
原始信用归用户 aaronk6 在 此答案 中向我指出