我有一个 position:fixed;
的 div,我的问题是,fixed的位置是相对于整个页面的,但我需要这个fixed div保持在另一个div内的中心位置,并且带有auto的margins。(所以当我向下滚动页面时,我希望始终看到div处于相同的位置)。
我使用jquery插件StickyScroll,但是在Internet Explorer中无法使其正常工作。
解决方案可以使用jquery/javascript和css。
谢谢
我有一个 position:fixed;
的 div,我的问题是,fixed的位置是相对于整个页面的,但我需要这个fixed div保持在另一个div内的中心位置,并且带有auto的margins。(所以当我向下滚动页面时,我希望始终看到div处于相同的位置)。
我使用jquery插件StickyScroll,但是在Internet Explorer中无法使其正常工作。
解决方案可以使用jquery/javascript和css。
谢谢
那么您不希望使用固定定位,而是绝对定位。
在要定位的元素上设置 position: absolute;
。 在居中的 div 上设置 position: relative;
,这样它就成为了可以定位内部元素的图层。
你绝对不需要jQuery或JavaScript来实现这个功能。你需要的是:
.outer {
width:200px;
height:600px;
background-color:red;
margin:0 auto;
}
.inner {
width:50px;
border:1px solid white;
position:fixed;
}
<div class="outer">
<div class="inner">some text here
</div>
</div>
我稍作修改了George Katsanos的代码,这可能对某些人有所帮助。
.outer {
width:200px;
height:300px;
background-color:red;
margin:0 auto;
overflow:auto;
}
.inner {
width:182px;
border:1px solid white;
position:absolute;
background-color:buttonface;
}
Sample at: http://jsfiddle.net/2mYQe/480/
我认为你应该将内部div的位置设置为sticky,它也是固定的,但相对于父容器(div)。
我曾经遇到过同样的问题,我就是这样解决的。
<div id="container">
<div id="inner">Some text here..</div>
</div>
<!-- CSS -->
<style>
#container{
position: <!--any position-->;
}
#inner{
position: sticky;
}
</style>
正确的解决方案是“flex”。原帖已经发布3年了,所以我假设我们可以忽略IE8的支持,而选择更现代的浏览器来支持这个解决方案。
正如许多人在这里指出的那样,每个提出的解决方案都面临着问题。从内容区域中的第一项被绝对定位的标题隐藏,或者内容区域占用父元素的整个高度,这意味着底部的内容区域有被截断的风险,除非你从总体高度中减去标题的高度(例如:height: calc(100% - "header height"px)),这意味着你的CSS中有硬编码的值...不好,或者滚动条被设置在父级别上,这意味着标题正在与它争夺空间。
为了避免这些hack解决方案,使用下面的“flex”解决方案。
<div style="width: 200px; float: right; border: 1px solid black;
display: flex; flex-direction: column;">
<div style="width: 100%;">
<div style="width: 100%;">
I'm a header
</div>
</div>
<div style="width: 100%; height: 100%; overflow:auto;">
<div style="height:900px; background-color:lavender;">content area</div>
</div>
</div>