珍しい新しいCSSユニットについて学びました。 vh
とvw
は、それぞれビューポートの高さと幅の割合を測定します。
Stack Overflowのこの質問を見てみましたが、ユニットがさらに似ているように見えました。
答えは具体的に言う
vwとvhは、それぞれウィンドウの幅と高さの割合です。100vwは幅の100%、80vwは80%などです。
これは、より一般的な%
ユニットとまったく同じように見えます。
開発者ツールで、値をvw/vhから%に、またはその逆に変更してみましたが、同じ結果が得られました。
2つの間に違いはありますか?そうでない場合、これらの新しいユニットがCSS3
に導入されたのはなぜですか?
100%
は、あらゆる高さの100%
にすることができます。たとえば、1000px
の高さの親div
と100%
の高さの子div
がある場合、その子div
は理論的にはビューポートの高さよりはるかに高いか、はるかに小さい可能性がありますビューポートの高さよりも、そのdiv
が100%
heightに設定されている場合でも。
代わりにその子div
を100vh
に設定すると、ビューポートの高さの100%
のみを埋めるとなり、必ずしも親div
ではありません。
body,
html {
height: 100%;
}
.parent {
background: lightblue;
float: left;
height: 200px;
padding: 10px;
width: 50px;
}
.child {
background: pink;
height: 100%;
width: 100%;
}
.viewport-height {
background: gray;
float: right;
height: 100vh;
width: 50px;
}
<div class="parent">
<div class="child">
100% height
(parent is 200px)
</div>
</div>
<div class="viewport-height">
100vh height
</div>
質問は非常に古く、@ Josh Beamが最大の違いに対処したことは知っていますが、まだ別の問題があります。
ビューポート全体を埋める<div>
の直接の子である<body>
があるとし、width: 100vw; height: 100vh;
を使用するとします。コンテンツを追加し、垂直スクロールバーが表示されるまで、width: 100%; height: 100vh;
とまったく同じように機能します。 vw
はビューポートの一部としてのスクロールバーのアカウントであるため、width: 100vw;
はwidth: 100%;
よりわずかに大きくなります。この小さな違いは、水平スクロールバーを追加することになり(ユーザーが少し余分な幅を見るために必要です)、結果として、高さも両方の場合で少し異なります。
親要素のサイズがドキュメントのビューポートのサイズと同じであっても、どちらを使用するかを決定する際には、このことを考慮する必要があります。
例:
width:100vw;
を使用:
.fullviewport {
width: 100vw;
height: 100vh;
background-color: red;
}
.extracontent {
width: 100vw;
height: 20vh;
background-color: blue;
}
<html>
<body>
<div class="fullviewport"></div>
<div class="extracontent"></div>
</body>
</html>
width:100%;
を使用:
.fullviewport {
width: 100%;
height: 100vh;
background-color: red;
}
.extracontent {
width: 100%;
height: 20vh;
background-color: blue;
}
<html>
<body>
<div class="fullviewport"></div>
<div class="extracontent"></div>
</body>
</html>
@IanCの回答とコード例に感謝します。とても助かりました。明確化:「サイドバー」を書いたときに「スクロールバー」を意味していたと思います。
スクロールバーをカウントするビューポートユニットに関するいくつかの関連する議論を次に示します。
W3C仕様 vw、vh、vmin、vmaxユニット(「ビューポートのパーセンテージの長さ」)には、「スクロールバーは存在しないと想定されています」と表示されます。
Firefoxは、「 Width:100%とwidth:100vw?の違い? 」の@Nolonarのコメントにあるように、「Can I Use」を引用して、100vwからスクロールバーの幅を引きます。
使用できます 、おそらく仕様(?)と緊張しているため、Firefox以外のすべてのブラウザーは、現在「誤って」100vwを垂直スクロールバーを含むページ全体の幅と見なしています。
vw(view-width)およびvh(view-height)の単位は、ビューポートのサイズと関係があります。100vwまたはvhは、ビューポートの幅/高さの100%です。
たとえば、ビューポートの幅が1600pxで、何かを2vwと指定した場合、それはビューポートの幅の2%、つまり32pxに相当します。
%単位は常に現在の要素の親要素の幅に基づいています
必ずしも発生していない違いがあります。 100vwにはscroolバーの幅が含まれますが、100%には含まれません。わずかな違いですが、設計を行う際に重要です。