CSSで要素の高さや幅を指定する際はpxや%といった単位を使うのが一般的ですが、本文はビューポートの単位を紹介します。
ビューポート単位
まず、ビューポート単位とは、ビューポート(Viewport)というブラウザの表示領域のサイズに基づいた相対単位です。
ビューポートのサイズに応じて、要素のサイズや位置を自動的に調整することができます。
ビューポート単位には、以下の4つがあります。
vw | viewport width | ビューポートの幅に対する割合(%) |
---|---|---|
vh | viewport height | ビューポートの高さに対する割合(%) |
vmin | viewport minimum | ビューポートの幅と高さのうち、値が小さい方に対する割合(%) |
vmax | viewport max | ビューポートの幅と高さのうち、値が大きい方に対する割合(%) |
vwとvh
vwとvhは、ビューポートの幅/高さを1単位とした相対単位です。
例えば、width: 50vw
と書くと、要素の幅がビューポートの幅の50%になります。
以下は、vwを使用した例です。
.div-01 {
width: 50vw;
}
例えば、あるスマホのビューポート幅をピクセルで表すと400pxです。
あるdivの幅は50vwです。
50vwは50/100ということで、200pxがこのdivの幅となります。
vminとvmax
vminは、Viewportの幅と高さのうち、小さい方を1単位とした相対単位です。
例えば、font-size: 2vmin
と書くと、フォントサイズがViewportの幅と高さのうち、小さい方の2%になります。
vmaxは、Viewportの幅と高さのうち、大きい方を1単位とした相対単位です。
例えば、line-height: 3vmax
と書くと、行の高さがViewportの幅と高さのうち、大きい方の3%になります。
.example {
font-size: 2vmin;
line-height: 3vmax;
}
幅100vwと100%の違い
幅100vwは、Viewportの幅に対して100%という意味で、Viewportの幅いっぱいに要素を広げることができます。
一方、幅100%は、親要素の幅に対して100%という意味で、親要素の幅いっぱいに要素を広げることができます。
例えば、以下のHTMLコードを考えてみましょう。
<div class="container">
<div class="box"></div>
</div>
この場合、.container
は親要素、.box
は子要素となります。
幅100%を指定する場合、.box
のCSSは以下のようになります。
.box {
width: 100%;
}
この場合、.box
は.container
の幅いっぱいに広がります。
幅100vwを指定する場合、.box
のCSSは以下のようになります。
.box {
width: 100vw;
}
この場合、.box
はViewportの幅いっぱいに広がります。
つまり、パーセントで定義された要素のサイズは親要素に基づくため、要素をページの幅や高さをいっぱいにする時は、パーセントよりビューポートの単位が適しています。
vhの用途
いくつかの応用例を紹介します。
ヘッダーやフッターの高さの指定
ヘッダーやフッターなど、サイト上部や下部に配置する要素の高さを、Viewportの高さを基準にして指定することができます。
header {
height: 70vh;
}
footer {
height: 20vh;
}
背景画像の指定
以下のようにbackground-size
プロパティに100vw
と100vh
を指定することで、Viewportいっぱいに背景画像を表示することができます。
body {
background-image: url('画像のURL');
background-size: 100vw 100vh;
background-repeat: no-repeat;
}
お役に立てましたら幸いです。ご不明点やご質問がございましたら、お気軽にコメント欄よりお問い合わせください。
コメント