ヘッダーとフッターの高さを柔軟に変更できるレイアウトを構築しようとしています。中央のセクションが残りのスペースを消費します。中央にオーバーフローがあると、この中央セクションだけにスクロール バーが表示されます。
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
が then に変更されたdisplay: table-cell
場合、WebKit と Gecko は同じ動作を示すか、オーバーフローを無視します。
が使用されている場合display: block
、WebKit は目的の動作を提供します (スクロール バーとフッターはビュー ポートの下部に残ります) が、Firefox はスクロール バーの追加を拒否し、代わりに画面の下部からフッターを押し出します (ビュー ポートのスクロール バー - ではなく、中間内容)。
Bugzillaチケットもオープンしました