Divの高さは100%で、コンテンツに合わせて拡大します


172

ページに高さを100%に設定したdiv要素があります。身長も100%に設定されています。内部のdivには背景などがあり、本体の背景とは異なります。これはdivの高さをブラウザー画面の高さの100%にするために機能しますが、問題はそのdiv内にブラウザー画面の高さを超えて垂直に伸びるコンテンツがあることです。下にスクロールすると、divはページのスクロールを開始する必要があったポイントで終了しますが、コンテンツはそれを超えてオーバーフローします。内部コンテンツに合わせて、divを常に一番下まで移動させるにはどうすればよいですか?

ここに私のCSSの簡略化があります:

body {
    height:100%;
    background:red;
}

#some_div {
    height:100%;
    background:black;
}

ページをスクロールすると、黒さが終了し、コンテンツが赤い背景に流れ込みます。#some_divで位置を相対に設定するか絶対に設定するかに関係なく、問題はどちらの方法でも発生します。#some_div内のコンテンツは主に絶対位置に配置され、データベースから動的に生成されるため、事前に高さを知ることはできません。

編集:これは問題のスクリーンショットです: divの問題


これは数週間前に尋ねられました。その質問を見つけることができるかどうかを確認します。私はそれにコメントしたと思います。 編集:私はあなたの質問はこれに似ていると信じていstackoverflow.com/questions/9398313/...
jmbertucci

理解を深めるためにコードをご確認ください
sandeep

完全なコードplsを投稿できますか
Sven Bieder

23
何千行ものPHPコード、CSS、JavaScriptが必要ですか?質問に関連するcssの部分を投稿しました...
Joey

2
NECROPOST IS A GO:div要素内のコンテンツは、(それを過ぎて伸びている場合、これらのような一般的overflowプロパティを設定する修正の問題overflow: hidden;overflow: scroll;など)。
AlbertEngelB 2013年

回答:


308

これは、メインで、CSSスタイルで何をすべきかです。 div

display: block;
overflow: auto;

そして触れないでください height


4
よく働きました。十分なコンテンツがない場合でも、コンテナーdiv に追加height: 100%html, bodyて高さを満たすようにする必要がありました。
Nico Huysamen、2013

素晴らしい解決策ですが、オブジェティブが応答性の高いウィンドウフィッティングのようなものであれば、実際に高さに触れることができます
Alexis Rabago Carvajal

されるdisplay: block;必要?Divはすでにブロックレベルの要素です。
Max Heiber

内部スクロールバーを追加します(水平および垂直の両方)
Nathan H

それでも親要素が子要素よりも少し高い場合は、余分なスペースがないか確認し、、または 削除してください。また、行の高さを調整してみてください。たとえばline-height: 0、画像を表示するためだけにテキストを必要としなかったため、
Zorgatone 2015年

57

設定するheightautoしてmin-heightまで100%。これでほとんどのブラウザで問題が解決します。

body {
  position: relative;
  height: auto;
  min-height: 100% !important;
}

3
IMO、これは「内部コンテンツに合わせてdivを常に一番下まで移動させるにはどうすればよいですか?」という質問に答えます。現在マークされている回答よりも優れています。これは、div / bodyがコンテンツに合わせて拡張されることを保証するのではなく、単にオーバーフロースクロールをオンにします。+1
Jammerz858 2014

私のケースのために働いた。どうも!
タイソンネロ2017

何らかの理由で、heightis 100%min-heightisの場合は機能しないことに注意してください。autoこの場合、これらは交換可能であると期待しますが、そうではないようです。
PeaBrain、

13

通常、この問題は、親Divの子要素がフローティングしている場合に発生します。ここで最新のソリューション問題のは:

CSSファイルに、疑似セレクターとともに.clearfixという次のクラスを記述します

.clearfix:after {
content: "";
display: table;
clear: both;
}

次に、HTMLで.clearfixクラスを親Divに追加します。例えば:

<div class="clearfix">
    <div></div>
    <div></div>
</div>

それは常に動作するはずです。コードをよりセマンティックにするため、クラス名を.clearfixではなく.groupとして呼び出すことができます。二重引用符 ""の間のContentの値にドットまたはスペースを追加する必要はないことに注意してください。また、overflow:auto; 問題を解決できる可能性がありますが、スクロールバーの表示などの他の問題が発生するため、お勧めできません。

出典:Lisa CatalanoとChris Coyierのブログ


8

をそのままにしheight: 100%て使用display:block;するdivと、内のコンテンツと同じスペースが使用されdivます。これにより、すべてのテキストが黒い背景にとどまります。


どこで使用しましたdisplay: blockか?あなたの質問ではそれはわかりません。
オービットのライトネスレース

Ronnieが提案した後で#some_divに追加しましたが、問題は解決しませんでした。
Joey

1
float:noneを追加してみてください。同じ#some_div cssへ
RonnieVDPoel

の代わりにfloat: none;、を使用してくださいclear:both;。同じことをしますが、@ RonnieVDPoel
Cannicide

6

この質問は古いかもしれませんが、更新に値します。これを行う別の方法を次に示します。

#yourdiv {
    display: flex;
    width:100%;
    height:100%;
}

1
古い質問に投稿する場合は、現在の値(フレックスにはプレフィックスがない)を使用することをお勧めします。
jhpratt

すみません、何の話かわかりません。
user9459537

1
Flexプレフィックスは今のところかなりの間必要ではありません。
jhpratt

そして、どれがですか?
user9459537

5

これを試して:

body { 
    min-height:100%; 
    background:red; 
} 

#some_div {
    min-height:100%; 
    background:black; 
} 

IE6以前のバージョンは、min-heightプロパティをサポートしていません。

ボディに高さを100%と指示すると、背景の高さは1つのブラウザの「ビューポート」(ブラウザのツールバーとステータスバーとメニューバーを除く表示領域、およびウィンドウの端)。コンテンツが1つのビューポートよりも高い場合、背景専用の高さからオーバーフローします。

ボディのこの最小高さプロパティは、コンテンツが1つのページ全体を下まで満たしていない場合、背景を少なくとも1つのビューポートと同じ高さにする必要があります。


3

古い質問ですが、私の場合、position:fixedそれを使用して解決しました。私の状況は少し違っていたかもしれません。divページの読み込み中に表示する必要のある読み込みアニメーションを含むオーバーレイ半透明がありました。つまり、ウィンドウを使用するheight:auto / 100%min-height: 100%、両方とも塗りつぶしますが、画面外の領域は塗りつぶしません。を使用するposition:fixedと、このオーバーレイがユーザーと一緒にスクロールし、常に表示領域を覆い、プリロードアニメーションが画面の中央に配置されたままになります。


1

これらの2行をCSS ID #some_divに追加するだけです

display: block;
overflow: auto;

その後、あなたはあなたが探しているものを手に入れます!


0

これはかなり簡単な答えなので、質問を理解したかどうかは完全にはわかりませんが、ここにいきます... :)

コンテナーのオーバーフロープロパティを可視または自動に設定してみましたか?

#some_div {
    height:100%;
    background:black; 
    overflow: visible;
    }

これを追加すると、動的コンテナーに必要なサイズに黒いコンテナーがプッシュされます。autoはスクロールバーが付いているように見えるので、私はautoよりも目に見えるほうを好みます...


0

最新のブラウザは「ビューポートの高さ」ユニットをサポートしています。これにより、divが使用可能なビューポートの高さに拡張されます。他のアプローチよりも信頼性が高いと思います。

#some_div {
    height: 100vh;
    background: black;
}

0

こんなこともできる

display:block;
overflow:auto;
height: 100%;

これには、コンテンツごとの各動的divが含まれます。クラスに共通のdivがある場合、コンテンツに応じて各動的divの高さが増加するとします


0

あなたも使うことができます

 display: inline-block;

私はこれで働いた


0

位置なしのオーバーレイ:修正済み

最近のメニューでこれを理解した本当にクールな方法は、本文を次のように設定することでした。

position: relative

次のようにラッパークラスを設定します。

#overlaywrapper {
    position: absolute;
    top: 0;
    width: 100%;
    height: 100%;
    background: #00000080;
    z-index: 100;
}

つまり、位置を固定する必要はなく、スクロールも可能です。私はこれを本当に大きいメニューのオーバーレイに使用しました。


0

フレックスを使用する

.parent{
    display: flex
}

.fit-parent{
    display: flex;
    flex-grow: 1
}

0

わかりました、私はこのようなものを試しました:

ボディ(ノーマル)

#MainDiv { 
  /* where all the content goes */
  display: table;
  overflow-y: auto;
}

正確な記述方法ではありませんが、メインのdivをテーブルとして表示すると、展開されてスクロールバーが実装されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.