実際html
には、ビューポートの 100% の高さまで正確に拡張されます。ここでのビューポートは、内部コンテンツではなく、ブラウザ ウィンドウです。
これを考慮してください(jsfiddle):
<div id="div1">
<div id="div2">
<div id="div3">
very much content
</div>
</div>
</div>
#div1 {
height:300px;
overflow-y:scroll;
border: 1px solid black;
}
#div2 {
height:100%;
}
#div3 {
height:600px;
}
div1
ここでは高さが 300px で、スクロールされます。コンテンツをスクロールするときは、内側の div を移動するだけですが、高さは変更されません300px
。height:100%
htmlに設定すると、まったく同じことが起こります。ブラウザの高さは変わりません。
ビューポートをズームアウトするとスクロールしないため、内部コンテンツの高さはビューポートの高さよりも小さくなります。
要するに、html {height:100%}
内部コンテンツの高さではなく、親の高さに関係します
アップデート:
ブロック要素の高さに 3 種類の値を指定できます。
パーセンテージは、生成されたボックスの包含ブロックの高さに関して計算されます。包含ブロックの高さが明示的に指定されておらず (つまり、コンテンツの高さに依存する)、この要素が絶対配置されていない場合、値は 'auto' に計算されます。ルート要素の高さのパーセンテージは、最初の包含ブロックに相対的です。
- auto - 高さは他のプロパティの値に依存します。(通常、内部コンテンツの高さ: テキスト、他のインライン要素、ブロック要素など)
ブラウザがページを表示したときに何が起こっているか:
height: 100%
になり<html>
ます。つまり、結果の高さは、生成されたボックス (html
その場合は -要素) を含むブロック (initial containing block
つまりbrowser window
、その場合) の高さに関して計算されます。としましょう1024px
。
- それからそれはかかり
height: 100%
ます<body>
。body
の高さを、 の既に計算された高さに設定html
します1024px
。
- 次に、ブラウザが に適用さ
height:auto
れ、#wrapper
次に および に#container
適用され<p>
ます。正確な方法はわかりませんが、高さの設定(およびそれに依存する他のすべてのスタイル、つまり背景、境界線など)を延期し、内部コンテンツに進むと推測できます。
- 次のポイントはテキストコンテンツです。ブラウザは、指定された関連プロパティまたは独自の関連プロパティを取得します。つまり
default styles
、font-family、font-size、テキストの高さなどです。
- その後、高さを - 要素に設定する
<p>
ため、<p>
すべてのコンテンツ (この場合はテキスト) が含まれるように下に引き伸ばされます。同じことが と にも起こり #container
ます#wrapper
。
の高さが (合意されたように)#wrapper
本体の高さよりも大きい場合は、を に適用する必要があります。それがデフォルトです。次に、 に適用されます。次に、ブラウザに全体のスクロールが表示されます。正直なところ、これが W3C 仕様で指定されているかどうかはわかりませんが、指定されていると推測できます。1024 px
overflow
body
visible
overflow: visible
html
window
したがって、ウィンドウをスクロールするhtml
とbody
、他のすべての要素と同様に移動します。これは、他の要素の場合と同じ動作です (上記の jsfiddle のように):

背景は要素に設定されますが、キャンバスbody
全体、body
つまり要素自体をはるかに超えて広がることに注意してください。これは、ボディに bg-property を設定する必要がある可能性があるというあなたの懸念に向けられています。これは、次のように述べているW3C 仕様に 100% 準拠しています。
ルート要素が...「background-color」の「transparent」と「background-image」の「none」の計算値を持つ「html」要素であるドキュメントの場合、ユーザーエージェントは代わりに背景の計算値を使用する必要がありますcanvasの背景を描画するときは、その要素の最初の ... "body" 要素の子のプロパティであり、その子要素の背景を描画してはなりません。このような背景も、ルート要素のみに描画された場合と同じ位置に固定する必要があります。
ページを縮小すると、ブラウザはすべての寸法を再計算します。Ctrl
たとえば、 +クリックするたびに-
ページが 20% 縮小するとします。Ctrl
次に、すべてのテキストが縮小されます。その高さは、 +-
クリックの影響を受けるフォントサイズに依存するため、それに応じて<p>
、高さが高さに依存するため#container
、#wrapper
すべてが縮小されtext
ます。しかしbody
、両方とも+クリックの影響を受けない の高html
さに依存する高さを持っています。これが、最終的にこれを取得する理由です。
window
Ctrl
-

その場合、幅と高さの動作に違いはありません。ブラウザウィンドウの幅よりも小さいことが判明した を設定width: 960px;
したため、水平方向の寸法で同じ問題が発生することはなく、オーバーフローは発生しません。#container
の幅が本体の幅を超えている場合、次の#container
ように表示されます。

これはすべて正常で予期される動作であり、ここで解決することは何もありません。