【发布时间】:2012-04-26 14:38:03
【问题描述】:
我在布局中有一个position: fixed div,作为侧边栏。我被要求将其部分内容固定在其顶部(内部),其余的则滚动如果它溢出 div 的底部。
我查看了this answer,但是那里提供的解决方案不适用于position: fixed 或position: absolute 容器,这很痛苦。
我已经对我的问题here 进行了 JSFiddle 演示。理想情况下,大量文本应该滚动,而不是溢出到页面底部。标题的高度可以随内容而变化,并且可以是动画的。
body {
background: #eee;
font-family: sans-serif;
}
div.sidebar {
padding: 10px;
border: 1px solid #ccc;
background: #fff;
position: fixed;
top: 10px;
left: 10px;
bottom: 10px;
width: 280px;
}
div#fixed {
background: #76a7dc;
padding-bottom: 10px;
color: #fff;
}
div#scrollable {
overlow-y: scroll;
}
<div class="sidebar">
<div id="fixed">
Fixed content here, can be of varying height using jQuery $.animate()
</div>
<div id="scrollable">
Scrolling content<br><br>
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>
</div>
如果没有固定的标题,我可以简单地将overflow-y: scroll 添加到div.sidebar,如果它溢出容器的底部,我可以愉快地滚动它的所有内容。但是,我遇到了在侧边栏顶部有一个固定的、可变高度的标题的问题,并且如果滚动条太长而无法放入容器中,则在该滚动条下方有任何内容。
div.sidebar 必须留在position: fixed,我非常希望在没有任何黑客攻击的情况下做到这一点,并使其尽可能跨浏览器。我尝试了各种方法,但都没有奏效,我不确定从这里尝试什么。
当position: fixed 容器内的 div 的内容溢出包含的 div 时,如何使 div 仅在 Y 方向滚动,并且具有可变的、不确定的高度的固定标题?我非常想远离 JS,但如果我必须使用它,我会的。
【问题讨论】:
-
我不确定是否存在纯 css 解决方案。基本上您尝试修复 div#fixed,但是当您这样做时,您会将其从文档的正常流程中移除,因此高度不会将其他元素推到页面下方。
-
考虑到非滚动 div 位于侧边栏内容的顶部,它不一定是
position: fixed- 它可以正常流。我想知道是否有办法将overflow: scroll元素的顶部向下推到非滚动div 的高度。实际上不是position: fixed。我的意思是“固定”,如“不滚动溢出”。 -
看来您在小提琴上取得了一些进展,如果您删除 div#sidebar 上的底部属性,则 div 将扩展以适应内容
-
为什么侧边栏不能是绝对位置或相对位置?您希望它与页面一起滚动吗?不是,把滚动条放在侧边栏上?
-
抱歉,我忘记添加了 - 侧边栏不会滚动,并且总是会拉伸以适应窗口。