CSS3からvw, vh, vmin, vmaxが追加されました。
新しい相対値(倍率)指定ですが、%との違いが分からない人もいると思います。
また、どこで使うのか分からない人のために、ソースコードのサンプルを入れながら、かんたんに分かりやすく説明します。
絶対値指定のpx、相対値(倍率)指定の%
px(ピクセル)は、PC, タブレット, スマホの画面の単位です。
値を指定すると確実にそのサイズで表示されます。
一方、%は親の要素のサイズに影響されます。『親の要素の○○%』という指定をするから。
vw, vh, vmin, vmaxは、%指定がグレードアップしたもの
vw, vh, vmin, vmaxは、CSS3から導入された新しい相対値指定の単位です。
これらの基準はビューポート(viewport)で、
ブラウザでWebページが表示されている全体のサイズ。
ブラウザのメニューとかはサイズに入りません。ページを表示する部分だけです。
タブレットやスマホなら、ほぼ端末のサイズになります。表にまとめました。
単位 | 意味 |
---|---|
vw | viewport width ビューポートの幅を基準にした相対サイズ 。 |
vh | viewport height ビューポートの高さを基準にした相対サイズ。 |
vmin | viewport min ビューポートの幅と高さで小さい方を基準にした相対サイズ。 |
vmax | viewport max ビューポートの幅と高さで大きい方を基準にした相対サイズ。 |
ビューポートと同じサイズは100です。10vwはスマホの幅が320pxなら、1/10の32px。
ブラウザの表示領域(端末)サイズの数%を指定するということですね?
なぜ、表示領域サイズの基準が必要になったのか?
なぜ、%だけではダメだったのでしょうか? これにはレスポンシブデザインが関係しています。
近年は、PC, タブレット, スマホなど、サイズの違う端末(デバイス)で同じWebページを見ることが当たり前です。
%の指定では親の要素が影響するので、HTMLタブの階層が多くなると、どれが基準なのか分からなくなっていました。
またサイズの違う端末で、それぞれバランスの良い配置・サイズのデザインをひとつのCSSファイルで作れることが必要でした。
スマホやタブレットは、端末の画面いっぱいに表示します。
表示領域のサイズからコンテンツのサイズを決めると、端末に合ったバランスの取れた配置・デザインができます。
そこから表示領域を基準にした単位が作られました。
CSS3以前にスマホはすでに普及していました。
そこで開発者たちは、同じHTML, CSSでPCとスマホを表示させるのをあきらめて、PC用ページ、SP(タブレット・スマホ)用ページの2つを用意していました。
vw, vh, vmin, vmaxのサンプルコード
vw, vh, vmin, vmaxのサンプルコードを見てみましょう。
ソースコードサンプルのボックスにタップやマウスを合わせると、右上にコピーボタンが出ます。
慣れないうちは、とりあえずコピー&ペーストで、自分で動かすところから始めると良いです。
幅をそれぞれ基準値に対して、auto(100%), 50%, 25%指定します。
結果が見やすいように色をつけて、幅のサイズを変えるクラスを追加しました。
HTMLの結果です。
スマホやタブレットなら、タテ・ヨコ動かしながら見てください。幅と高さが切り替わるので、50*, 25*の長さが変わります。
PCなら、ブラウザのウィンドウサイズを変えると確認ができます。
vmaxを使うときは注意が必要です。
端末の長いほうが基準になるので、コンテンツがはみ出ることがあります。width: **vh, height: **vwを指定するときも同じです。
vw, vh, vmin, vmaxの使い方
vw, vh, vmin, vmaxの使いどころは『大きいサイズのコンテンツ』です。
- ヘッダ画像・ページ全体の背景画像
- ページトップのアイキャッチ画像
- 見出し付近のアイキャッチ画像
- 挿入動画
- タブ機能の表示エリア
など。画面いっぱいに広げるようなものです。サンプルコードを見てみましょう。
CSSに次のものを追加して、HTMLを変更します。
サンプルなのでdivを使います。画像・動画でも方法は同じです。
HTMLの結果です。
端末を動かしたりブラウザのウィンドウサイズを変えると、サンプルのサイズが変わります。
まとめ
vw, vhなど、サイズ指定の単位が増えたのは、Webサイトを見る端末(デバイス)のサイズが多様になったからです。
そのためにレスポンシブデザインが必要になり、それを実現するために使いやすい単位が増えました。
これらの単位が、基準値からの相対値(倍率)なところにも、レスポンシブデザインを意識していることが分かります。
レスポンシブ対応は、今のWebサイトでは必須なので、以前のようなpxなどの絶対値指定をむやみに使うのはやめるべきです。
まず先に相対値指定を考えるべきでしょう。
そして、相対値指定の中でも、vw, vhなどのレスポンシブデザイン用に用意された単位を、%よりも優先して使いましょう。