[解決済み】display:flexを使って残りの縦幅をCSSで埋める。
2022-04-19 02:28:06
質問
3列レイアウトの場合。
- 一番上の行は、その内容に応じてサイズを調整する必要があります。
- 下の行の高さはピクセル単位で固定されている必要があります。
- 中段は、コンテナいっぱいに広がるようにします。
問題は、メインコンテンツが拡張されると、ヘッダーとフッターの行がつぶれてしまうことです。
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; */
}
<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>
フィドル
- http://jsfiddle.net/7yLFL/1/ (動作中、コンテンツは小さい)
- http://jsfiddle.net/7yLFL/ (壊れた、より大きなコンテンツで)
私はレガシーブラウザを無視して、最新のCSSを使えるという幸運な状況にある。フレックスレイアウトを使って、ようやく古いテーブルベースのレイアウトから解放されるかと思いきや。なぜか思い通りにならない...。
ちなみに、SOには"filling the remaining height"に関する関連質問がたくさんありますが、私がフレックスで抱えている問題を解決してくれるものはありません。参考までに。
- divを画面の残りの高さいっぱいに表示させる
- 残りの垂直スペースを埋める - CSSのみ
- コンテナを他の div と共有するときに、残りの高さ/幅を埋める div がありますか?
- ネストされた div を、残りのコンテナ div の高さの 100% に伸ばします。
- フレックスボックスレイアウトで縦方向のスペースを100%確保するにはどうすればよいですか?
- その他
解決方法は?
シンプルにする DEMO
section {
display: flex;
flex-flow: column;
height: 300px;
}
header {
background: tomato;
/* no flex rules, it will grow */
}
div {
flex: 1; /* 1 and it will fill whole space left if no flex value are set to other children*/
background: gold;
overflow: auto;
}
footer {
background: lightgreen;
min-height: 60px; /* min-height has its purpose :) , unless you meant height*/
}
<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>
フルスクリーン版
section {
display: flex;
flex-flow: column;
height: 100vh;
}
header {
background: tomato;
/* no flex rules, it will grow */
}
div {
flex: 1;
/* 1 and it will fill whole space left if no flex value are set to other children*/
background: gold;
overflow: auto;
}
footer {
background: lightgreen;
min-height: 60px;
/* min-height has its purpose :) , unless you meant height*/
}
body {
margin: 0;
}
<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>
関連
-
[解決済み】divの高さを画面の残りスペースで埋めるようにする
-
[解決済み] font: inheritを使用する目的は何ですか?
-
[解決済み] divを親の中で自動的に縦に重ねるにはどうしたらいいですか?
-
[解決済み] DjangoのCSSが更新されない
-
[解決済み] HTMLとCSSのBackground-imageが表示されない
-
[解決済み] CSSでテキストや画像の背景を透明にするには?
-
[解決済み] CSS Flexboxで、"justify-items "と "justify-self "プロパティはなぜないのですか?
-
[解決済み] 残りの幅を埋めるためにdivを展開する
-
[解決済み】HTML5入力のプレースホルダの色をCSSで変更する。
-
[解決済み] フレックスボックスレイアウトで縦方向のスペースを100%確保するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】div間の空白を削除する
-
[解決済み] CSSやSVGで半円を描く
-
[解決済み] このベベルボタンをCSSで実現するには?
-
[解決済み] css グリッドによる垂直・水平方向の中央揃え 4x4 正方形グリッド
-
[解決済み] セレクトボックスのテキストを中央揃えにすることは可能ですか?
-
[解決済み] svgの円のダブルストロークの色
-
[解決済み] 幅・高さをピクセル単位からパーセント単位で設定する。
-
[解決済み] cssでこの要素を取得するには
-
[解決済み] ReactJSを使ったインラインのフォントサイズスタイルの生成
-
[解決済み] select2入力の幅を設定する(Angular-uiディレクティブを使用)