以下是分解为基本组成部分的方法:
<!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与我的容器重叠并且不会显示滚动条。
这是小提琴:fiddle #1
我想避免在页面主体上使用滚动条,而是通过inner
div中的滚动条管理溢出,从而使stretched
始终完全可见。
我可以将position: absolute; top: 0; ...
同样的技巧应用到inner
div,但是我必须明确指定header
+ someControls
的高度,我我想避免,因为它在我的所有页面上都有所不同。
这就是我想要它的工作原理(除top: 40px;
部分外):fiddle #2
我在这里做错了什么?提前谢谢!
答案 0 :(得分:1)
我不认为这可以用纯CSS(..适用于所有常见的浏览器)。
以下是使用old Flexbox规范的方法:http://jsfiddle.net/thirtydot/xRr7e/
不幸的是,它只有works in WebKit browsers / Firefox。
现在是时候使用几行JavaScript进行此布局了。
答案 1 :(得分:0)
嘿,为什么在样式表中定义绝对位置
替换这个
.stretched {
width: 250px;
margin: 30px auto 20px;
background-color: green;
}
答案 2 :(得分:0)
删除
position: absolute;
并添加
border: 10px solid green;
http://jsfiddle.net/Rpdr9/367/
编辑:如果你不喜欢巨大的边框,你可以将边框大小更改为1px。
border: 1px solid green;
即便如此。