很长一段时间以来,我一直在摆弄一个特定的布局问题,显然我走错了路。
以下是分解为基本组件的方法:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<div class="stretched">
<div class="header">SOME HEADER</div>
<div class="someControls">
<input type="button" value="click me"/>
<input type="button" value="no me"/>
</div>
<div class="inner">
some text...
</div>
</div>
</body>
</html>
使用以下CSS:
.stretched {
position:absolute;
height:auto;
bottom: 0;
top: 0;
left: 0;
right: 0;
width: 250px;
margin: 30px auto 20px;
background-color: green;
}
.inner {
margin:10px;
background-color: red;
overflow: auto;
}
我想要做的是让stretched
div 使用所有可用的垂直视口空间(在页眉和页脚上方和下方减去几个像素)并以固定的方式水平居中。
这似乎工作得很好。问题是该属性未按我overflow: auto;
的意愿应用于内容。inner
当some text...
变长时,inner
div 会覆盖我的容器并且不显示滚动条。
这是小提琴:小提琴#1
我想避免在页面正文上有滚动条,而是让溢出由inner
div 内的滚动条管理,从而stretched
始终完全可见。
position: absolute; top: 0; ...
我也可以对div应用相同的技巧inner
,但是我必须明确指定header
+的高度someControls
,这是我想避免的,因为它在我的所有页面上都不同。
这就是我想要的工作方式(除了部分top: 40px;
):fiddle #2
我在这里做错了什么?提前致谢!