CSS Divはページの高さを100%伸ばします


195

ページの左側にナビゲーションバーがあり、ページの高さの100%まで拡大したいと思います。ビューポートの高さだけでなく、スクロールするまで非表示の領域も含まれます。これを達成するためにJavaScriptを使用したくありません。

HTML / CSSで実行できますか?

回答:


171

これは、divを動的背景のコンテナーとして使用するときに最終的に思いついたソリューションです。

  • z-indexバックグラウンド以外の使用のためにを削除します。
  • を削除するleftright、列全体の高さを指定します。
  • を削除するtopbottom、全幅の行の場合。

編集1:以下のCSSは、FFおよびChromeで正しく表示されなかったため、編集されました。position:relativeHTML上に移動し、本文をheight:100%ではなくに設定しましたmin-height:100%

編集2: CSSにコメントを追加しました。上記の手順をいくつか追加しました。

CSS:

html{
    min-height:100%;/* make sure it is at least as tall as the viewport */
    position:relative;
}
body{
    height:100%; /* force the BODY element to match the height of the HTML element */
}
#cloud-container{
    position:absolute;
    top:0;
    bottom:0;
    left:0;
    right:0;
    overflow:hidden;
    z-index:-1; /* Remove this line if it's not going to be a background! */
}

HTML:

<!doctype html>
<html>
<body>
    <div id="cloud-container"></div>
</body>
</html>

どうして?

html{min-height:100%;position:relative;}

これがないと、cloud-container DIVはHTMLのレイアウトコンテキストから削除されます。position: relativeDIVがHTMLボックスbottom:0の下部を参照するように描画されるときに、DIVがHTMLボックス内に留まるようにします。height:100%ビューポートではなくHTMLタグの高さを参照するようになったので、cloud-container でも使用できます。


これは素晴らしいですが、中心にはなりません。そのための修正はありますか?margin:0 auto; 機能していません。
クリーム

素晴らしい答え。htmlただし、要素にはmin-height(高さだけでなく)を使用する必要があることに気付きました。何故ですか?
HartleySan 2013

使用するheightとは、「あなたはこの背が高いです。それ以上でもそれ以下でもない。」つまり、ビューポートの高さになります。少なくともビューポートと同じかそれよりも高くする必要があります。min-heightこれはうまくやります。
Knyri 2013

1
Z-indexが表示されているのは、これは私が行った動く背景のスニペットであり、divが背景に留まるようにしたかったからです。通常の要素には必要ありません。
Knyri、2014年

5
これは素晴らしいです。私は15年間CSSを使用してきましたが、<html>への配置とビューポートへの配置が2つの別個のものであることは決してありませんでした。ありがとうございました!
Ben Hull

81

HTML5では、最も簡単な方法は単に実行することですheight: 100vh。「vh」は、ブラウザウィンドウのビューポートの高さを表します。ブラウザおよびモバイルデバイスのサイズ変更に対応します。


38
ポイントを完全に逃しています。OPは、ウィンドウ/ビューポートの高さではなく、ページの高さを要求しています。
グレッグ

9
ビューポートの高さではなく、ドキュメントの高さ。
パンクビット2016

7
上記と同じコメント
ericn '26 / 02/26

11
私は急いで質問を読み間違えましたが、この回答は役に立ちました。私が行ったのと同じ間違いをしていただきありがとうございますが、今、この警告をその警告を含むように修正することを提案したいと思います。
デュレット

ちなみに調べてみましたvw
アーロンフランケ

14

私にも同様の問題があり、解決策はこれを行うことでした:

#cloud-container{
    position:absolute;
    top:0;
    bottom:0;
}

高さがページの高さの100%のページ中心のdivが必要だったので、私のトータルソリューションは次のとおりです。

#cloud-container{
    position:absolute;
    top:0;
    bottom:0;
    left:0;
    right:0; 
    width: XXXpx; /*otherwise div defaults to page width*/
    margin: 0 auto; /*horizontally centers div*/
}

親要素(または単に「本体」)に position: relative;


16
なぜ誰もがそれをと呼ぶのcloud-containerですか?
Wilf、2014

これはいいですね!高さの修正を無視することは実際には素晴らしいアイデアであり、それに関するバグにはまだ気づきませんでした。大好きです。接吻 !先端の人をありがとう!
daneczech 2016年

13

あなたは偽の列を使用してカンニングする ことができますまたはあなたはいくつかのCSSトリックを使用することができます


1
ただし、cssトリックでは高さが同じ列が得られますが、高さが100%の列は得られません。
thedz 2009

ナビゲーションバーがコンテンツの高さまで拡張されると、ページの高さが決まり、高さが100%になります。
ライアンドハーティ

1
-1は、ナビゲーションバーが常に十分に高いことを確認する100%安全な方法を提供しない場合。
Aaron Digulla

デッドリンク:((((
JBis

9

テーブルを使用するのは簡単です:

<html>

<head>
    <title>100% Height test</title>
</head>

<body>
    <table style="float: left; height: 100%; width: 200px; border: 1px solid red">
        <tbody>
            <tr>
                <td>Nav area</td>
            </tr>
        </tbody>
    </table>
    <div style="border: 1px solid green;">Content blabla... text
        <br /> text
        <br /> text
        <br /> text
        <br />
    </div>
</body>

</html>

DIVが導入されたとき、人々はテーブルをとても恐れていたので、貧しいDIVは比喩的なハンマーになりました。


6
DIVと流動的なスタイルは素晴らしいですが、CSSは、TABLEがテーブルレイアウトの本質を達成するのと同じ方法で画面レイアウトの本質をキャプチャするのにまだ失敗していると思います。...そして、テーブルのレイアウトはまだ物事を行うための許容できる方法です。
ジェフミートボールヤン

8
テーブルは、ページレイアウトではなく表形式のデータ用です。そうは言っても、古くからある100%の高さの質問に関しては、CSSにはいくつかの大きな欠点があります。厳しい締め切り時にこのソリューションを使用したことは認めざるを得ませんが、常にあきらめているように感じました。
スコットグリーンフィールド

6
@スコット:私はかつて3週間を無駄にして、3つの主要なブラウザで100%の高さのデザインを実現しようとしました。私は本当にもうでたらめ「テーブルは悪です」聞くことはできません:-(も、私の知識で、divを使用すると、あまりにも複雑である。
アーロンDigulla

1
適切な計画により、テーブルに依存する必要がなくなります。現在、2012年には、業界全体がIE6 / 7を超えているため、高さ100%のテーブルを使用しないことを強くお勧めします。
Vael Victus 2012

4
<table>を使用する必要はありません。<div style = "display:table;"を使用できます。:D
Wilf、2014

8

絶対位置を使用します。これは、手動でレイアウトしたり、フローティングダイアログを表示したりする必要がある位置アブソリュートの一般的な使用方法ではないことに注意してください。ウィンドウまたはコンテンツのサイズを変更すると、これは自動的に拡大します。これには標準モードが必要ですが、IE6以降で動作すると思います。

idが 'thecontent'のdivをコンテンツで置き換えてください(指定された高さは説明のためにあり、実際のコンテンツの高さを指定する必要はありません)。

<div style="position: relative; width: 100%;">
      <div style="position: absolute; left: 0px; right: 33%; bottom: 0px; top: 0px; background-color: blue; width: 33%;" id="navbar">nav bar</div>
      <div style="position: relative; left: 33%; width: 66%; background-color: yellow;" id="content">
         <div style="height: 10000px;" id="thecontent"></div>
      </div>
</div>

これが機能する方法は、外側のdivがナビゲーションバーの参照ポイントとして機能することです。外側のdivは、「content」divのコンテンツによって引き伸ばされます。ナビゲーションバーは、絶対配置を使用して、親の高さまで伸びます。水平方向の配置では、コンテンツdivをナビゲーションバーと同じ幅だけオフセットします。

CSS3フレックスボックスモデルを使用すると、これははるかに簡単になりますが、IEではまだ使用できず、独自の癖があります。


こんにちは、私はIE6でテストしましたが、ナビゲーションバーは伸びませんでした。FireFoxでは、Chromeは非常に機能します。
Lucas Pottersky、2010

IE6では、これまでに数十回行ったことがない限り、テーブル、JavaScript、またはブラウザースイッチを使用してください。
Aaron Digulla

7

より最近のブラウザをターゲットにしている場合、生活は非常に簡単です。試してください:

.elem{    
    height: 100vh;
 }

ページの50%で必要な場合は、100を50に置き換えます。


3
これは、ページの高さが画面の高さと同じであることを前提としています。多くの場合、ページは画面の高さよりもはるかに長くなる可能性があるため、下にスクロールします。
TidyDev

6

私はあなたと同じ問題に遭遇しました。DIVJavaScriptを使用してdivを操作するのが簡単なため、背景としてaを作成したかったのです。とにかく、そのdivのcssで行った3つのこと。

CSS:

{    
position:absolute; 
display:block; 
height:100%; 
width:100%; 
top:0px; 
left:0px; 
z-index:-1;    
}

5

モーダルポップアップを表示する前にWebページ全体をカバーしたいと思います。CSSとJavascriptを使用して多くの方法を試しましたが、次の解決策を見つけるまで、どれも役に立ちません。それは私のために働きます、それがあなたにも役立つことを望みます。

<!DOCTYPE html>
<html>
	<head>
		<style>
			html, body {
			    margin: 0px 0px;
			    height 100%;
			}
          
            div.full-page {
                position: fixed;
                top: 0;
                bottom: 0;
                width: 100%;
                height: 100%;
                background-color: #000;
                opacity:0.8;
                overflow-y: hidden;
                overflow-x: hidden;
            }
          
            div.full-page div.avoid-content-highlight {
                position: relative;
                width: 100%;
                height: 100%;
            }
          
            div.modal-popup {
                position: fixed;
                top: 20%;
                bottom: 20%;
                left: 30%;
                right: 30%;
                background-color: #FFF;
                border: 1px solid #000;
            }
		</style>
		<script>
		
			// Polling for the sake of my intern tests
			var interval = setInterval(function() {
				if(document.readyState === 'complete') {
					clearInterval(interval);
					isReady();
				}    
			}, 1000);
			
			function isReady() {
				document.getElementById('btn1').disabled = false;
				document.getElementById('btn2').disabled = false;
				
				// disable scrolling
                document.getElementsByTagName('body')[0].style.overflow = 'hidden';
			}
			
			function promptModalPopup() {
                document.getElementById("div1").style.visibility = 'visible';
                document.getElementById("div2").style.visibility = 'visible';
				
				// disable scrolling
                document.getElementsByTagName('body')[0].style.overflow = 'hidden';
            }
          
            function closeModalPopup() {
                document.getElementById("div2").style.visibility = 'hidden';  
                document.getElementById("div1").style.visibility = 'hidden';
				
				// enable scrolling
                document.getElementsByTagName('body')[0].style.overflow = 'scroll';
            }
		</script>
		
	</head>
	<body id="body">
		<div id="div1" class="full-page">
			<div class="avoid-content-highlight">
                
            </div>
		</div>
        <button id="btn1" onclick="promptModalPopup()" disabled>Prompt Modal Popup</button>
		<div id="demo">
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
			<h2>Original content</h2>
		</div>
        <div id="div2" class="modal-popup">
            I am on top of all other containers
            <button id="btn2" onclick="closeModalPopup()" disabled>Close</button>
        <div>
	</body>
</html>

幸運を ;-)



1

 
           document.body.onload = function () {
                var textcontrol = document.getElementById("page");
                textcontrol.style.height = (window.innerHeight) + 'px';
            }
<html>
<head><title></title></head>
<body>

<div id="page" style="background:green;">
</div>
</body>
</html>


それが何をするか、そしてそれがどのように問題を解決するかを示して、あなたの答えにいくつかの説明を加えてください
バナナの私たちの男2014年

div "ページ" 100%高さの任意のプラットフォーム。jsスクリプトを<script> </ script>タグにコピーして、HTMLコードに貼り付けるだけです。
reaw_ni 2014年

0

シンプルで、テーブルのdivにラップするだけです...

HTML:

<div class="fake-table">
   <div class="left-side">
     some text
   </div>
   <div class="right-side">
     My Navigation or something
   </div>
</div>

CSS:

<style>

 .fake-table{display:table;width:100%;height:100%;}
 .left-size{width:30%;height:100%;}
 .left-size{width:70%;height:100%;}

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