我正在尝试构建一个允许灵活高度的页眉和页脚的布局,中间的部分占用剩余空间。中间的任何溢出都应该为这个中间部分提供一个滚动条。
我拥有的适用于 Safari 和 Chrome 的代码是:
<!DOCTYPE html>
<html>
<head>
<style>
html, body {
margin: 0;
padding: 0;
height: 100%;
}
.l-fit-height {
display: table;
height: 100%;
}
.l-fit-height > * {
display: table-row;
height: 1px;
background-color: red;
}
.l-fit-height-expanded {
height: auto;
background-color: blue;
display: table-row;
}
.l-scroll-content {
height: 100%;
overflow-y: auto;
}
</style>
</head>
<body>
<div class="l-fit-height">
<section>
Header
</section>
<section class="l-fit-height-expanded">
<div class="l-scroll-content">
<p>Foo</p>
<p>Foo</p>
<p>Foo</p>
<p>Foo</p>
<p>Foo</p>
<p>Foo</p>
<p>Foo</p>
<p>Foo</p>
<p>Foo</p>
<p>Foo</p>
<p>Foo</p>
<p>Foo</p>
<p>Foo</p>
<p>Foo</p>
<p>Foo</p>
</div>
</section>
<section>
Footer
</section>
</div>
</body>
</html>
我一生都无法弄清楚为什么 Firefox 的行为不同。中间的内容会正确扩大高度,但不会缩小超过内容的高度。
很难知道什么是正确的行为。有任何想法吗?
编辑
类似的示例设置在这里:http: //jsfiddle.net/t3mZF/
有趣的是,如果.l-fit-height-row-content
更改为display: table-cell
WebKit 和 Gecko 会表现出相同的行为或忽略溢出。
如果display: block
使用,则 WebKit 会提供所需的行为(滚动条和页脚保留在视口底部),但 Firefox 拒绝添加滚动条,而是将页脚推离屏幕底部(视口上的滚动条 - 而不是中间内容)。
我还开了一张bugzilla 票