高さ:100%または最小-高さ:htmlおよびbody要素の場合は100%?


82

レイアウトの設計中にhtml, body要素をに設定しheightました100%が、場合によっては失敗するので、何を使用する必要がありますか?

html, body {
   height: 100%;
}

または

html, body {
   min-height: 100%;
}

ええと、これは意見に基づくものではありません。それぞれの方法には独自の欠陥があるので、推奨される方法とその理由は何ですか?

回答:


193

あなたはに背景画像を適用しようとしている場合htmlと、bodyブラウザウィンドウ全体埋めることに、どちらもありません。代わりにこれを使用してください:

html {
   height: 100%;
}

body {
   min-height: 100%;
}

私の推論はここにあります(この方法で背景を適用する方法を全体的に説明します):

ところで、あなたは指定する必要が理由heightmin-heighthtmlbodyもない要素は、任意の固有の高さを持っているので、それぞれがあります。height: autoデフォルトでは両方ともです。高さが100%のビューポートであるためheight: 100%、ビューポートから取得され、bodyコンテンツのスクロールを可能にするために最小限に適用されます。

最初の方法は、height: 100%両方で使用しbodyて、ビューポートの高さを超えて拡大し始めると、コンテンツが拡大するのを防ぎます。技術的には、これによってコンテンツのスクロールが妨げられることはありませんbodyが、折り目の下にギャップが残るため、通常は望ましくありません。

2番目の方法は、min-height: 100%両方で使用しますが、明示的ながない限り、パーセンテージを使用しても機能しないため、のbody高さ全体に拡張するhtmlことmin-heightはありません。bodyhtmlheight

完全を期すために、CSS2.1のセクション10にはすべての詳細が含まれていますが、これは非常に複雑な読み物なので、ここで説明した以外に興味がない場合はスキップできます。


4
これは私がこれを最も気に入ったものです:)height: 100% is taken from the viewport, then applied to body as a minimum to allow for scrolling of content簡単で簡単な解決策...ありがとう//
エイリアン氏2013

では、スクロールバーはどのように魔法のように表示されるのでしょうか。このhtml要素にはoverflow:visibleデフォルトであるため、ブラウザの動作によってスクロールバーが表示され、ドキュメントの通常のフロー全体を表示できると思います。
FABRICIOマット

@FabrícioMatté:これoverflow: autoは、スクロールバーの出所であるビューポートに変換されます。これはセクション11で説明されています:w3.org/TR/CSS21/visufx.html
–BoltClock

10
@BoltClockここで子供を100%体にする方法はありますか?これはうまく
エイリアン氏2013

1
ボックスサイズ:border-boxはマージンに影響しません。パディング、ええ、しかしそれは個人的な好み次第です。
BoltClock

17

ビューポートの高さ(vh)単位を使用できます。

body {
    min-height: 100vh;
}

親の高さではなく画面を基準にしているため、HTMLの高さは必要ありません:100%。


ただし、これにはどのような追加の利点がありますか。
xji 2018

追加の利点はありません。問題を解決する別の方法です。
ダムジャンパブリカ2018

モバイルがこれをどのように理解するかに注意してください
GWorking 2010

ただ、何のすべてのブラウザが最初にこのユニット...ドゥ・チェック・ブラウザの互換性をサポートしていないことに注意してください:caniuse.com/#feat=viewport-units
dBlaze
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.