3列レイアウトの場合:
- 上の行はその内容に応じてサイズを調整する必要があります
- 下の行はピクセル単位で固定された高さでなければなりません
- 真ん中の行はコンテナを埋めるために拡大する必要があります
問題は、メインコンテンツが展開すると、ヘッダーとフッターの行が圧縮されることです。
HTML:
<section>
<header>
header: sized to content
<br>(but is it really?)
</header>
<div>
main content: fills remaining space<br>
x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
<!-- uncomment to see it break - ->
x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
<!-- -->
</div>
<footer>
footer: fixed height in px
</footer>
</section>
CSS:
section {
display: flex;
flex-flow: column;
align-items: stretch;
height: 300px;
}
header {
flex: 0 1 auto;
background: tomato;
}
div {
flex: 1 1 auto;
background: gold;
overflow: auto;
}
footer {
flex: 0 1 60px;
background: lightgreen;
/* fixes the footer: min-height: 60px; */
}
フィドル:
- http://jsfiddle.net/7yLFL/1/ (動作し、コンテンツは小さい)
- http://jsfiddle.net/7yLFL/ (壊れており、コンテンツが大きい)
レガシーブラウザを無視して、CSSの最新かつ最高の機能を使用できるという幸運な状況にいます。flexレイアウトを使用して、最終的に古いテーブルベースのレイアウトを取り除くことができると思いました。どういうわけか、それは私が望むことをしていない...
記録のために、「残りの高さを埋める」に関するSOに関する多くの関連する質問がありますが、私がflexで抱えている問題を解決するものは何もありません。参照:
フィドルで期待どおりに機能しているようです。
—
Dayan
はい、<div>の残りのコンテンツのコメントを解除して、どのように機能しないかを確認する必要があります。多分私は壊れたバージョンをリンクするべきでした。ごめんなさい。
—
Zilk、2014
両方のバージョンを質問に追加しました。
—
Zilk、2014
私はあなたが今何を意味するかを理解しています。
—
Dayan