我遇到了这样的情况,当用户向下滚动时,侧边栏的一部分会固定在屏幕上,但是当我获取位置并将fixed css应用于侧边栏元素时,它会固定在整个屏幕上,而不仅仅是父元素(即侧边栏)。
请问如何正确设置这个呢?
我遇到了这样的情况,当用户向下滚动时,侧边栏的一部分会固定在屏幕上,但是当我获取位置并将fixed css应用于侧边栏元素时,它会固定在整个屏幕上,而不仅仅是父元素(即侧边栏)。
请问如何正确设置这个呢?
首先了解定位:
固定定位 或者 [ position:fixed ]
具有固定定位的元素相对于浏览器窗口进行定位。
相对定位 或者 [ position:relative ]
相对定位的元素相对于其正常位置进行定位。
绝对定位 或者 [ position:absolute ]
绝对定位的元素相对于第一个具有非静态位置的父元素进行定位。
所以在您的情况下,您的父级 div
应该具有 position:relative
,并且您的子级 div
应该具有 position:absolute
,而不是 position:fixed
<div class="sidebar">
<div class="fixed" style="position: fixed;"></div>
</div>
position: fixed
属性的元素,top
、left
、right
或bottom
属性始终相对于浏览器窗口定位。解决办法是将.fixed
div包装在另一个div中,并将所有需要定位的操作都放在该包装器上,而不是在.fixed
div上进行。让我演示一下:
HTML代码:
<div class="sidebar">
<div class="helper">
<div class="fixed"></div>
</div>
</div>
CSS:
.sidebar {
position: relative;
}
.helper {
position: absolute;
top: XYZ; left: ZYX; /*where XYZ and ZYX would
be the values you were
trying before to give to .fixed*/
}
.fixed {
position: fixed;
}
在这个fiddle中看到它的运作:http://jsfiddle.net/joplomacedo/T2PL5/
让父元素的position: relative
,然后它的子元素将以此作为其absolute
定位的参考点。有关详细信息,请参阅 "包含块(containing block)"的定义 和 CSS 2规范。
关于fixed
定位:如何使任何东西固定(即相对于视口固定)但仍然相对于其他未固定到视口的元素?这似乎与我相矛盾,这也是我最初误解你的问题的原因。
position: fixed;
元素。例如,一个容器的transform: translate(200px);
将破坏它的全屏特性。它会表现得像一个普通的div。filter
和perspective
。top
、right
、bottom
、left
的定位和大小效果。
An element with fixed position is positioned relative to the browser window.
- Ron van der Heijden