エンジニアをやっていると、どこかしらでCSSに触れる機会はあると思います。 そんな時にいつも迷うのが、サイズの指定方法です。 pxや%は知っているけどremとかはよく分からずに使ってる・・・ なんて人も多いのではないでしょうか。 今回はサイズ指定方法の仕様についてまとめました。
CSS3
についてですpx
(ピクセル指定)最もオーソドックスなサイズの指定方法だと思います。
px
はデバイスにおける1dotを表す絶対値です。
ちなみに、一般的にfont-size
のデフォルト値は16px
になっています。
.hoge {
font-size: 20px;
}
%
(パーセント指定)%
は親要素の対象プロパティ
に対する相対値です。
どういうことかというと、例えば子要素のfont-size
を80%
とした場合、親要素のfont-size
の値が参照され、また同時に子要素のwidth
を50%
とした場合、親要素のwidth
の値を参照します。
以降紹介していくem
やrem
,vm
は基準となるプロパティが定まっているのに対して、%
は基準となるプロパティが定まっていないのが特徴です。
.hogehoge {
width : 50%;
}
px
や%
は小数点を指定できる?結論から述べると「できますが、やらない方が無難」です。 なぜかというと、ブラウザやバージョン毎に小数点の丸め方が違うからです。 このあたりは、下記の資料が参考になります。
これを見てわかる通り、同じブラウザでもバージョンによって小数点を切り捨てたり、特定の桁で丸めたり
と仕様が異なるため、利用ブラウザによって表示が崩れる可能性があります。
よって、使用する事自体は可能だが、あまりオススメしないです。
em
(エム指定)em
は自身
のfont-size
に対する相対値です。
しばしば、親要素のfont-size
の相対値と紹介されがちですが、例えば下記の例では<p>
の枠線は10px
ではなく6px
になります(親要素ではなく自身のfont-size
の12px
に対する0.5
、つまり50%
となるため)。
<div style="font-size:20px">
<p style="font-size:12px;border:0.5em solid">hoge</hoge>
</div>
.fuga {
height : 0.7em;
}
rem
(レム)指定rem
はem
と対照的にルート要素のfont-size
を基準にします。
ルート要素とは<html>
なので、通常はデフォルト値の16px
に対する相対値になります。
.fugafuga {
width : 2rem;
}
vm
(ブイエム)指定vm
はブラウザのwidth
に対する相対値です。
例えばブラウザのwidth
が1200px
なら1vm
は12px
になります。
ここで注意したいのが、ブラウザのwidth
にはスクロールバー
も含まれるという点です。
つまり、100vm
を指定するとスクロールバー分のwidth
が設定されるため、その分だけ横スクロールが発生してしまいます。
.puni {
width : 50vm;
}
calc()
一部のブラウザ限定ですが、calc()
を用いて上記の値を計算することができます。
.punipuni {
font-size : calc(1rem + 4px)
}
今回はCSS
におけるサイズの指定方法について紹介しました。
それぞれ長短があり、たとえばborder
のような値はブラウザや親要素によって変動しないpx
を使うのがオススメです。
他の指定方法については相対的な値指定のため、レスポンシブ対応する際に非常に便利です。
目的によって適切な指定方法を使い分けることによって、より完成されたデザインになると思うので、是非それぞれの特色を覚えておきましょう。