回答:
これの秘訣は、html要素とbody要素に100%の高さを指定することです。一部のブラウザは、親要素(html、本文)を参照して高さを計算します。
<html>
<body>
<div id="Header">
</div>
<div id="Content">
</div>
</body>
</html>
html, body
{
height: 100%;
}
#Header
{
width: 960px;
height: 150px;
}
#Content
{
height: 100%;
width: 960px;
}
すべての答えを忘れて、CSSのこの行は2秒で私のために働きました:
height:100vh;
1vh
=ブラウザ画面の高さの1%
レスポンシブレイアウトスケーリングの場合、次を使用することをお勧めします。
min-height: 100vh
[2018年11月更新] コメントで述べたように、min-heightを使用すると、レスポンシブデザインで問題が発生するのを回避できる場合があります
[2018年4月更新]コメントで述べたように、2011年に質問があったとき、すべてのブラウザーがビューポートユニットをサポートしているわけではありませんでした。他の答えは当時の解決策vmax
でした-IEではまだサポートされていないため、これはまだすべてにとって最善の解決策ではないかもしれません。
min-height: 100vh
方がはるかに良いだろうというマイナーな提案。レスポンシブデザインにも対応します。
実際、最良のアプローチはこれです:
html {
height:100%;
}
body {
min-height:100%;
}
これは私にとってすべてを解決し、フッターを制御するのに役立ち、ページがスクロールダウンされているかどうかに関係なく、固定フッターを持つことができます。
テクニカルソリューション-編集
歴史的に、「高さ」は「幅」と比較して最も簡単に成形するのが難しいものです。CSS <body>
はスタイリングが機能することに焦点を当てているため。上記のコード-私たちは与えた<html>
と<body>
高さ。ここで魔法が登場します。プレイテーブルに「min-height」<body>
がある<html>
ので<body>
、min-heightを保持するため、ブラウザよりも優れていると言えます。これにより<body>
、高さがすでに早い<html>
ため、オーバーライドできます<html>
。言い換えると、ブラウザをだまし<html>
てテーブルから「バンプ」し、独立してスタイルを設定できるようにします。
min-height
そしてheight
?
<body>
はスタイリングが機能することに焦点を当てているため。このコード:私たちは与えた<html>
と<body>
高さ。ここで魔法が登場します。プレイテーブルに「min-height」<body>
がある<html>
ため<body>
、min-heightを保持しているため、サーバーよりも優れていることをサーバーに伝えています。これにより<body>
、高さがすでに早い<html>
ため、オーバーライドできます<html>
。言い換えると、サーバーをだまし<html>
てテーブルから「バンプ」し、独立してスタイルを設定できるようにします。
min-heightプロパティでvhを使用できます。
min-height: 100vh;
マージンの使用方法に応じて、次のようにすることができます...
min-height: calc(100vh - 10px) //Considering you're using some 10px margin top on an outside element
HTML5でこれを行うことができます:
CSS:
body, html{ width:100%; height:100%; padding: 0; margin: 0;}
header{ width:100%; height: 70px; }
section{ width: 100%; height: calc(100% - 70px);}
HTML:
<header>blabablalba </header>
<section> Content </section>
私にとって、次はうまくいきました:
ヘッダーとコンテンツをdivでラップしました
<div class="main-wrapper">
<div class="header">
</div>
<div class="content">
</div>
</div>
この参照を使用して、フレックスボックスで高さを塗りつぶしました。CSSは次のようになります。
.main-wrapper {
display: flex;
flex-direction: column;
min-height: 100vh;
}
.header {
flex: 1;
}
.content {
flex: 1;
}
親をに設定することもできdisplay: inline
ます。http://codepen.io/tommymarshall/pen/cECyHを参照してください
また、htmlとbodyの高さも100%に設定してください。
受け入れられた答えは機能しません。そして、最高投票数の回答は実際の質問には答えません。固定ピクセル高さヘッダーと、ブラウザーの残りの表示のフィラーを使用し、owerflowのためにスクロールします。これは、絶対配置を使用して実際に機能するソリューションです。また、質問の「固定ヘッダー」の音によって、ヘッダーの高さがわかっていると思います。ここでは例として150pxを使用します。
HTML:
<html>
<body>
<div id="Header">
</div>
<div id="Content">
</div>
</body>
</html>
CSS :(視覚効果のみの背景色を追加)
#Header
{
height: 150px;
width: 100%;
background-color: #ddd;
}
#Content
{
position: absolute;
width: 100%;
top: 150px;
bottom: 0;
background-color: #aaa;
overflow-y: scroll;
}
これがどのように機能するかを詳細に確認するには、実際のコンテンツをに入れ、ブートストラップの行と列を使用して#Content
、このjsfiddleを確認してください。
bottom
プロパティがあることを確認しました#Content
滞在がページの最後に立ち往生。説明してくれてありがとう。
ここに5セントを追加して、古典的な解決策を提供してください。
html {height:100%;}
body {height:100%; margin:0;}
#idOuter {position:relative; width:100%; height:100%;}
#idHeader {position:absolute; left:0; right:0; border:solid 3px red;}
#idContent {position:absolute; overflow-y:scroll; left:0; right:0; border:solid 3px green;}
<div id="idOuter">
<div id="idHeader" style="height:30px; top:0;">Header section</div>
<div id="idContent" style="top:36px; bottom:0;">Content section</div>
</div>
これはすべてのブラウザで機能し、スクリプトやフレックスはありません。全ページモードでスニペットを開き、ブラウザのサイズを変更します。全画面モードでも目的の比率が維持されます。
idHeader.height
およびidContent.top
境界線を含むように調整され、境界線が使用されていない場合は同じ値を持つ必要があります。そうしないと、計算された幅に境界線、マージン、パディングが含まれないため、要素がビューポートから引き出されます。left:0; right:0;
width:100%
ボーダーが使用されていない場合、同じ理由で置き換えることができます。padding-top
や
padding-bottom
属性を追加する必要があります#idOuter
。私の答えを完了するために、ここにフッターのレイアウトがあります:
html {height:100%;}
body {height:100%; margin:0;}
#idOuter {position:relative; width:100%; height:100%;}
#idContent {position:absolute; overflow-y:scroll; left:0; right:0; border:solid 3px green;}
#idFooter {position:absolute; left:0; right:0; border:solid 3px blue;}
<div id="idOuter">
<div id="idContent" style="bottom:36px; top:0;">Content section</div>
<div id="idFooter" style="height:30px; bottom:0;">Footer section</div>
</div>
そして、これはヘッダーとフッターの両方を持つレイアウトです:
html {height:100%;}
body {height:100%; margin:0;}
#idOuter {position:relative; width:100%; height:100%;}
#idHeader {position:absolute; left:0; right:0; border:solid 3px red;}
#idContent {position:absolute; overflow-y:scroll; left:0; right:0; border:solid 3px green;}
#idFooter {position:absolute; left:0; right:0; border:solid 3px blue;}
<div id="idOuter">
<div id="idHeader" style="height:30px; top:0;">Header section</div>
<div id="idContent" style="top:36px; bottom:36px;">Content section</div>
<div id="idFooter" style="height:30px; bottom:0;">Footer section</div>
</div>
IE 9以下をサポートする必要がない限り、私はflexboxを使用します
body { display: flex; flex-direction: column; }
.header { height: 70px; }
.content { flex: 1 1 0 }
また、ページ全体を埋めるために本文を取得する必要があります
body, html{ width:100%; height:100%; padding: 0; margin: 0;}
CSS PLaY | クロスブラウザー固定ヘッダー/フッター/中央単一列レイアウト
CSSフレーム、バージョン2:例2、指定された幅| 456 Berea Street
重要なことの1つは、これは簡単に聞こえるかもしれませんが、このような効果を得るためにCSSファイルにかなり醜いコードが入るということです。残念ながら、それが本当に唯一の選択肢です。
これまでに見つけた最良の解決策は、ページの下部にフッター要素を設定し、フッターと展開する必要のある要素のオフセットの差を評価することです。例えば
<div id="contents"></div>
<div id="footer"></div>
#footer {
position: fixed;
bottom: 0;
width: 100%;
}
var contents = $('#contents');
var footer = $('#footer');
contents.css('height', (footer.offset().top - contents.offset().top) + 'px');
また、各ウィンドウのサイズ変更でコンテンツ要素の高さを更新したい場合があるので...
$(window).on('resize', function() {
contents.css('height', (footer.offset().top -contents.offset().top) + 'px');
});
このようなことを試しましたか?
CSS:
.content {
height: 100%;
display: block;
}
HTML:
<div class=".content">
<!-- Content goes here -->
</div>