[解決済み] div (height) が親の残りの高さを占めるようにする。
質問
コンテナ
div
を二つの子で構成しています。最初の子は与えられた高さを持っています。どうすれば、2番目の子がコンテナの "フリースペース" を占めるようになりますか?
div
の自由空間を占めるようにするにはどうしたらよいでしょうか。
この例では、ピンクの
div
は、空白のスペースも占有しているはずです。
この質問に似ています。 divが残りの高さを占めるようにするにはどうすればよいですか?
しかし、私は 位置の絶対値 .
どのように解決するのですか?
を展開する。
#down
の残りのスペースを埋めるために、子プロセスを
#container
は、実現したいブラウザサポートと
#up
が定義された高さを持つかどうかによって、さまざまな方法で実現できます。
サンプル
.container {
width: 100px;
height: 300px;
border: 1px solid red;
float: left;
}
.up {
background: green;
}
.down {
background: pink;
}
.grid.container {
display: grid;
grid-template-rows: 100px;
}
.flexbox.container {
display: flex;
flex-direction: column;
}
.flexbox.container .down {
flex-grow: 1;
}
.calc .up {
height: 100px;
}
.calc .down {
height: calc(100% - 100px);
}
.overflow.container {
overflow: hidden;
}
.overflow .down {
height: 100%;
}
<div class="grid container">
<div class="up">grid
<br />grid
<br />grid
<br />
</div>
<div class="down">grid
<br />grid
<br />grid
<br />
</div>
</div>
<div class="flexbox container">
<div class="up">flexbox
<br />flexbox
<br />flexbox
<br />
</div>
<div class="down">flexbox
<br />flexbox
<br />flexbox
<br />
</div>
</div>
<div class="calc container">
<div class="up">calc
<br />calc
<br />calc
<br />
</div>
<div class="down">calc
<br />calc
<br />calc
<br />
</div>
</div>
<div class="overflow container">
<div class="up">overflow
<br />overflow
<br />overflow
<br />
</div>
<div class="down">overflow
<br />overflow
<br />overflow
<br />
</div>
</div>
グリッド
CSSの
grid
レイアウトは、Flexbox モデルほど簡単ではないかもしれませんが、別の選択肢を提供します。しかし、コンテナ要素にスタイルを設定するだけでよいのです。
.container { display: grid; grid-template-rows: 100px }
は
grid-template-rows
は最初の行を100pxの固定高さとして定義し、残りの行は残りのスペースを埋めるために自動的に伸張します。
確か IE11 では
-ms-
の接頭辞があるため、対応したいブラウザで機能を確認するようにしてください。
フレックスボックス
CSS3 の
フレキシブルボックスレイアウトモジュール (
flexbox
)
は、現在では十分にサポートされており、非常に簡単に実装することができます。柔軟性があるので
#up
が定義された高さを持っていない場合でも動作します。
#container { display: flex; flex-direction: column; }
#down { flex-grow: 1; }
IE10 および IE11 の一部のフレックスボックス プロパティのサポートにはバグがある可能性があり、IE9 以下ではまったくサポートされていないことに注意する必要があります。
計算された高さ
もうひとつの簡単な解決策は
CSS3
calc
機能単位で
アルバロの回答で指摘されているように
のように、最初の子の高さが既知の値であることが必要です。
#up { height: 100px; }
#down { height: calc( 100% - 100px ); }
かなり広くサポートされており、目立った例外は <= IE8 または Safari 5 (サポートなし) と IE9 (部分的サポート) だけです。他のいくつかの問題点としては calc と併用することです。 トランスフォーム または ボックスシャドウ というように、複数のブラウザでテストしてください。
他の選択肢
もし古いサポートが必要なら
height:100%;
に
#down
に変更すると、ピンクの div がフルハイトになりますが、ひとつだけ注意点があります。 これはコンテナのオーバーフローを引き起こします。
#up
がそれを押し下げるからです。
そのため
overflow: hidden;
をコンテナに追加して修正します。
あるいは、もし
#up
の高さが固定されている場合、コンテナ内に絶対的に配置し、padding-top を
#down
.
さらに、もう一つの選択肢は、テーブル表示を使うことです。
#container { width: 300px; height: 300px; border: 1px solid red; display: table;}
#up { background: green; display: table-row; height: 0; }
#down { background: pink; display: table-row;}
関連
-
[解決済み】divの高さを画面の残りスペースで埋めるようにする
-
[解決済み] divをクリックすると、その下にある要素に移動します。
-
document.forms 使用方法
-
[解決済み] <html xmlns="http://www.w3.org/1999/xhtml">」は何をするものですか?
-
[解決済み] CSSの親セレクタはありますか?
-
[解決済み] 箇条書きのない順序なしリストが必要です。
-
[解決済み] inline/inline-block要素間のスペースを削除するにはどうすればよいですか?
-
[解決済み] ボディの高さをブラウザの高さの100%にする
-
[解決済み】CSSで子DIVの幅を親DIVより広くする方法はありますか?
-
[解決済み】display:flexを使って残りの縦幅をCSSで埋める。
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] BootstrapのCollapse Navbarが動作しない
-
[解決済み] ジャンボトロンのセンター出しは?
-
[解決済み] HTMLのテーブルからボーダーを完全に削除する方法
-
[解決済み] リンクのように動作するHTMLボタンを作成する方法
-
[解決済み] スクロールバーを隠すが、スクロールはできる状態
-
[解決済み] divブロック内のテキストを(水平方向と垂直方向に)センタリングするにはどうすればよいですか?
-
[解決済み] クリアフィックスとは何ですか?
-
[解決済み] 複数のノンブレイキングスペース("nbsp")ではなく、タブスペースを使用しますか?
-
[解決済み] Bootstrap 3 の sr-only とは何ですか?
-
[解決済み] 親ディバイスの高さを指定せずに、子ディバイスの高さを100%にする方法は?