フォントサイズは結局どう指定する? px em % rem 各違いは

レスポンシブ対応のコーディングが一般的になって来た今日この頃ですが、

多くのコーディング代行をさせて頂く中で、ふと気になったので、記しておきます。

 

レスポンシブcssでスマホの対応をする場合ですが、そもそも、デザインが9pxや8pxとかで指定されている事もしばしば。

 

現状ではWEBのfontで表現できる最小サイズは10pxですね。

単位(px em % rem)は変われど、それ以下は表示ができません。
(その場合、テキスト画像にして対応しています。)

 

PCのデザインとスマホのデザイン(あれば)を入稿頂き、実装を進めるのですが、

PC = 1200px スマホ = 767px or 640px

みたいな形でデザインを入稿頂きます。

 

PC版はフォントサイズをそのまま指定( ”px” or “em” or “%” or “rem” など)して良いかと思いますが、スマホ版だとデザイン上、フォントサイズは非常に大きな数字で入稿されます。

 

コーディングを始めた当初、スマホのフォントサイズの指定に、いつも曖昧な時期がありました。

 

フォントサイズ 各それぞれの単位の違い(”px” “em” “%” “rem”)

 

px 絶対指定 指定したサイズ
em 相対指定 親要素を基準に計算される
% 相対指定 親要素を基準に計算される
rem 相対指定 root要素(html)を基準に計算される

 
それぞれはこの様な意味ですね。

具体的には、

bodyのfont-sizeを100%にした場合、100% = 16px
1em = 16px
2em = 32px

となります。

上記の様にすると、計算するのが少し面倒なので、1em = 10px にする為に
bodyのfont-sizeを62.5%に指定します。

これで 1em = 10px になりますので、

14px = 1.4em
16px = 1.6em
22px = 2.2em

みたいな形で指定できます。

em、%、でのフォントサイズ指定は、相対指定(親要素を基準)で計算されるので、注意が必要です。
対してremでの指定は相対指定ですが、root(html)を基準値にしますので、remでの指定がわかりやすいですね。

レスポンシブ対応の場合、全てのフォントサイズを rem で指定し、メディアクエリで root(html) の基準値を変更する事で、フォントサイズを変更します。

最近は “vw” “vh” で指定する事も多くなってきました。

(個人的には、vwでの指定が好き)

それぞれの意味は

vw viewport width ビューポートの幅に対する割合
vh viewport height ビューポートの高さに対する割合
vmin viewport minimum ビューポートの幅と高さのうち、値が小さい方に対する割合
vmax viewport max ビューポートの幅と高さのうち、値が大きい方に対する割合

みたいな感じですね。

なぜ vw を好んで使用するかと言うと、rem での指定だとメディアクエリで指定したpx範囲でのみ、フォントサイズが変動しますよね。
昨今の多種多様なデバイスサイズを全て網羅するのは、中々難しいですよね。。。

vw での指定だと、ビューポートの幅で変動するので、全てのデバイス幅に対応可能ですよね。
(そもそも vw に対応している必要はありますが。)

なので最近は vw で指定しています。

皆さんはいかがでしょうか?