Menu

CSS font-size で文字サイズを指定: px、rem、em、キーワード

font-size プロパティは文字の大きさを指定します。使える単位 (px、rem、em、%、キーワード、vw)、HTML で文字サイズを変える方法、rem が無難な選択である理由、em のサイズが掛け算で積み重なる仕組みを解説します。

このページのコードはエディタで実行できます - 編集してすぐに結果を確認できます。

CSS で文字サイズを指定する方法

font-size プロパティは文字の大きさを指定します。任意の要素に指定すると、子が独自のサイズを指定しない限り、中のすべてのテキストがそのサイズを継承します。

HTML で文字サイズを変えるときも CSS を使います。style 属性 (<p style="font-size: 20px;">) か、スタイルシートのルールを追加します。1990 年代の <font size="5"> タグは廃止されていて、現代のページで使う理由はありません。

font-size に使える単位

値例基準
px16pxなし: 固定サイズ
rem1.25remルートの <html> 要素の文字サイズ (初期値は 16px)
em1.2em親要素の文字サイズ
%120%em と同じく親の文字サイズ (120% は 1.2em)
キーワードlarge初期値 medium を中心とした決まった段階
相対キーワードsmaller, larger親のサイズから 1 段階
ビューポート4vwビューポートの幅 (その 4%)
関数clamp(1rem, 4vw, 2rem)最小値と最大値の間で可変

値を入力して、ブラウザが計算したサイズを見てみましょう:

20px、2em、150%、x-large、smaller、5vw を試してみてください。big のような無効な値は無視され、テキストは最後の有効なサイズを保ちます。

rem と em: つまずきやすい違い

rem は常にルート要素を見るので、1.2rem はどこに書いても同じサイズです。em は親を見るので、要素を入れ子にするとサイズが掛け算になります:

いちばん内側の em のボックスは 16 × 1.2 × 1.2 × 1.2 = 27.648px です。いちばん内側の rem のボックスは 19.2px のままです。この積み重なりは、部品が一緒に拡大縮小すべきコンポーネントでは便利ですが、それ以外では想定外の結果になります。すべての長さの単位の比較は 単位のページ にあります。

キーワード: xx-small から xx-large

絶対キーワードは medium を中心とした決まった段階に対応します。medium はユーザーのデフォルトのサイズ (変更していなければ 16px) です:

デフォルトの 16px では、small は 13px、large は 18px、x-large は 24px、xx-large は 32px です。キーワードは手早く作るには十分ですが、デザインシステムではふつう rem で独自の段階を決めます。

clamp() で可変の文字サイズ

画面に合わせて大きくなり、それでいて小さすぎも大きすぎもしない見出しは、clamp() 1 つで書けます。最小値、拡大縮小する推奨サイズ、最大値です。

幅 800px のプレビューでは 5vw は 40px で、24px と 48px の間にあるので、この値が採用されます。可変の文字サイズの詳細は clamp のページ で解説しています。

ページ全体の基準サイズを決める

body (または html) に一度だけサイズを指定し、ほかはすべてそれに対する相対値にします:

html { font-size: 100%; }  /* respects the user's setting, usually 16px */
body { font-size: 1rem; }
h1   { font-size: 2.25rem; }
small, .caption { font-size: 0.875rem; }

ページ上のすべてのサイズを rem で指定するのでない限り、html { font-size: 62.5%; } のようなテクニックは避けましょう。また html に固定の px サイズを指定してはいけません。読み手がブラウザで選んだ文字サイズを上書きしてしまいます。その設定がないと文章を読めない人もいます。

アクセシビリティの注意点

  • 画面で読む本文は 16px 以上を目安にしましょう。
  • rem と em のサイズはユーザーのデフォルトの文字サイズ設定に従います。px のサイズはページのズームには従いますが、その設定には従いません。
  • iPhone の Safari は、文字サイズが 16px 未満の入力欄にフォーカスするとページを拡大します。これを避けるには、フォームの入力欄を font-size: 1rem 以上にしましょう。

よくある間違い

  • <font> タグを使う。 廃止されています。font-size プロパティを使いましょう。
  • 入れ子の em のサイズが際限なく大きく (小さく) なる。 積み重なりが必要なとき以外は rem を使いましょう。
  • html に固定の px サイズを指定する。 読み手自身の文字サイズ設定を上書きします。
  • 見出しにはすでにサイズがあることを忘れる。 <h1> の初期値は 2em なので、本文と同じサイズにしたいなら h1 { font-size: 1em; } が必要です。
  • ビューポート単位だけを使う。 font-size: 3vw はスマートフォンでは読めないほど小さく、広いモニターでは巨大になります。clamp() で囲みましょう。

よくある質問

CSS で文字サイズを変えるには?

要素に font-size プロパティを指定します: p { font-size: 18px; }。長さ (px、rem、em)、パーセント、large などのキーワードが使えます。

HTML で文字サイズを変えるには?

スタイルシートか style 属性で CSS を使います: <p style="font-size: 20px;">。古い <font size="5"> タグは HTML5 では廃止されているので使わないでください。

ブラウザのデフォルトの文字サイズは?

ユーザーがブラウザの設定で変えていなければ、本文は 16px です。初期状態では 1rem とキーワード medium がこの値に等しくなります。

文字サイズには px、em、rem のどれを使うべきですか?

ほとんどのテキストには rem を使います。ユーザーのブラウザの文字サイズ設定に合わせて変わり、掛け算で積み重なりません。ボタンの中のアイコンのように、親に合わせたいサイズには em を使います。px は読み手がブラウザで設定したデフォルトの文字サイズに従わないので、本文には避けましょう。

em の文字サイズがどんどん大きくなるのはなぜですか?

em は親の文字サイズが基準なので、入れ子の要素では掛け算になります。1.2em の中の 1.2em は基準の 1.44 倍です。常にルート要素が基準の rem に切り替えましょう。

Coddy programming languages illustration

Coddyでコードを学ぼう

始める