私はdiv
2人の子供がいるコンテナを持っています。最初の子は所定の高さです。div
特定の高さを指定せずに、2番目の子がコンテナの「空きスペース」を占めるようにするにはどうすればよいですか?
この例では、ピンクdiv
もホワイトスペースを占める必要があります。
この質問に似ています:divが残りの高さを占めるようにする方法は?
しかし、私は絶対的な立場を与えたくありません。
私はdiv
2人の子供がいるコンテナを持っています。最初の子は所定の高さです。div
特定の高さを指定せずに、2番目の子がコンテナの「空きスペース」を占めるようにするにはどうすればよいですか?
この例では、ピンクdiv
もホワイトスペースを占める必要があります。
この質問に似ています:divが残りの高さを占めるようにする方法は?
しかし、私は絶対的な立場を与えたくありません。
回答:
#down
残りのスペースを埋めるために子を拡張する#container
ことは、達成したいブラウザのサポートや#up
、定義された高さがあるかどうかに応じて、さまざまな方法で実現できます。
サンプル
グリッド
CSSのgrid
レイアウトはさらに別のオプションを提供しますが、Flexboxモデルほど簡単ではありません。ただし、必要なのはコンテナー要素のスタイリングだけです。
.container { display: grid; grid-template-rows: 100px }
grid-template-rows
固定された100ピクセルの高さである第1の行を定義し、行が自動的に残りの空間を充填するように延伸します残ります。
IE11には-ms-
プレフィックスが必要だと思いますので、サポートするブラウザの機能を検証してください。
フレックスボックス
CSS3のフレキシブルボックスレイアウトモジュール(flexbox
)がサポートされ、実装が非常に簡単になりました。柔軟性があるため、#up
高さが定義されていなくても機能します。
#container { display: flex; flex-direction: column; }
#down { flex-grow: 1; }
一部のフレックスボックスプロパティに対するIE10およびIE11のサポートにはバグがある可能性があり、IE9以下ではまったくサポートされないことに注意することが重要です。
計算された高さ
別の簡単な解決策は、CSV3calc
機能ユニットを使用することです。Alvaro が彼の回答で指摘していますが、最初の子の高さが既知の値である必要があります。
#up { height: 100px; }
#down { height: calc( 100% - 100px ); }
かなり広くサポートされていますが、注目すべき例外は<= IE8またはSafari 5(サポートなし)およびIE9(部分サポート)だけです。その他の問題には、変換またはボックスシャドウと組み合わせたcalcの使用が含まれるため、問題がある場合は、複数のブラウザーでテストしてください。
他の選択肢
古いサポートが必要な場合は、追加height:100%;
し#down
てピンクのdivを完全な高さにすることができますが、1つの注意点があります。#up
が押し下げているため、コンテナにオーバーフローが発生します。
したがって、それoverflow: hidden;
を修正するためにコンテナに追加できます。
または、の高さ#up
が固定されている場合は、それをコンテナ内に完全に配置し、パディングトップをに追加できます#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;}
position: relative;
は、ウィンドウではなく、コンテナに対して相対的に配置され、コンテナの中に絶対的に配置されます。したがって、それは実行可能なオプションになるはずです。
私がこの質問をしてからほぼ2年になります。私が持っていたこの問題を解決するcss calc()を思いついただけで、誰かが同じ問題を抱えている場合に備えて追加するとよいと思いました。(ちなみに私は最終的に絶対位置を使用しました)。
http://jsfiddle.net/S8g4E/955/
ここにCSSがあります
#up { height:80px;}
#down {
height: calc(100% - 80px);//The upper div needs to have a fixed height, 80px in this case.
}
そして、それについての詳細はこちら:http : //css-tricks.com/a-couple-of-use-cases-for-calc/
ブラウザのサポート:http : //caniuse.com/#feat=calc
calc
ブラウザのワイドサポートはそれほど重要ではありません(IE8以前とSafari 5ではサポートされていません)。
#up
高さで同様にする方法はありますか?
私の答えはCSSのみを使用し、overflow:hiddenまたはdisplay:table-rowを使用していません。最初の子には実際に高さが指定されている必要がありますが、質問では、2番目の子だけに高さを指定する必要がないと述べているので、これは許容できると思います。
html
<div id="container">
<div id="up">Text<br />Text<br />Text<br /></div>
<div id="down">Text<br />Text<br />Text<br /></div>
</div>
CSS
#container { width: 300px; height: 300px; border:1px solid red;}
#up { background: green; height: 63px; float:left; width: 100% }
#down { background:pink; padding-top: 63px; height: 100%; box-sizing: border-box; }
デモを確認してください-http://jsfiddle.net/S8g4E/6/
CSSを使用-
#container { width: 300px; height: 300px; border:1px solid red; display: table;}
#up { background: green; display: table-row; }
#down { background:pink; display: table-row;}
私が誤解しているのでなければ、height: 100%;
とoverflow:hidden;
を追加するだけ#down
です。
#down {
background:pink;
height:100%;
overflow:hidden;
}
編集:を使用したくないので、このシナリオでoverflow:hidden;
使用できますdisplay: table;
。ただし、IE 8より前のバージョンではサポートされていません(display: table;
サポート)。
#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;
}
注:あなたは#down
高さを#container
高さから#up
高さを引いたものにしたいと言っていました。display:table;
ソリューションは、まさにしていると、このjsfiddleはかなり明確ことを描写します。
overflow:hidden
して、追加のコンテンツを非表示にすることができます。
フロートを使用してコンテンツをプッシュダウンできます。
固定サイズのコンテナがあります:
#container {
width: 300px; height: 300px;
}
コンテンツはフロートの横に流れることができます。フロートを全幅に設定しない限り:
#up {
float: left;
width: 100%;
}
最上位#up
を#down
共有している間、#down
のコンテンツは、フロートの最下位の後にのみ開始できます#up
。
#down {
height:100%;
}
#up
は、おそらくそれで問題ありません。
満足のいく答えが見つからなかったので、自分で見つけなければなりませんでした。
私の要件:
calc()
残りの要素は別の要素のサイズについて何も認識していないため、使用しないでください。flex-grow: 1
すると要素を、要素のコンテンツサイズが小さい場合に残りのスペースをすべて使用できるようにします。flex-shrink: 0
れたすべてのフレックスアイテムを指定します。overflow: hidden
して、スクロールを無効にし、オーバーフローコンテンツの表示を禁止します。overflow: auto
と、要素内でのスクロールが可能になります。