我有一个带有两个子div(标题和正文)的父div,我想将标题位置固定在顶部,只有正文应滚动。
HTML
<div class="box">
<div class="header">Header</div>
<div class="body">Body</div>
CSS
.box {
height: 300px;
border: 1px solid #333;
overflow: auto;
}
.header {
position: absolute;
width: 100%;
height: 100px;
background: #ccc;
}
.body {
height: 300px;
background: #999;
margin-top: 101px;
}
我发现标题div与父div的滚动条重叠。我不能将父div位置设置为相对,因为我希望标题位置固定。我无法将标题位置设置为“固定”,因为此内容可以在页面中间某处使用。
如何避免绝对定位的子节点与父节点的滚动条重叠?
查找jsfiddle:http://jsfiddle.net/T43eV/1/
答案 0 :(得分:3)
溢出属性应该在.body
上设置,而不是.box
,因此:http://jsfiddle.net/T43eV/8/
答案 1 :(得分:1)
这有帮助吗?
.box { position:relative; }
编辑:无论如何都不需要使用absolute
,将其删除并将overflow:auto
放在.body
上。
.box {
height: 300px;
border: 1px solid #333;
}
.header {
width: 100%;
height: 100px;
background: #ccc;
}
.body {
height: 200px;
background: #999;
width:100%;
overflow: auto;
}
编辑:我不认为您可以跨平台一致地执行此操作。您可以通过将.header上的right
属性设置为滚动条上的大小来实现,但滚动条的大小绑定到操作系统并且不是单个大小。
您可以查看iframe
,因为它会在您的网页,滚动条和所有内容中创建一个页面。
答案 2 :(得分:1)
答案 3 :(得分:0)
一种方法是使用sticky position。这样会将标头保留在可滚动div内,但不会使其与滚动重叠(如果设置了较低的z-index,则不会与滚动重叠)
.box {
height: 300px;
border: 1px solid #333;
overflow: auto;
}
.header {
position: sticky;
top:0;
height: 100px;
margin-bottom:-100px;
background: #ccc;
}
.body {
height: 300px;
background: #999;
margin-top: 101px;
}