CSS で文字サイズを指定する方法
font-size プロパティは文字の大きさを指定します。任意の要素に指定すると、子が独自のサイズを指定しない限り、中のすべてのテキストがそのサイズを継承します。
HTML で文字サイズを変えるときも CSS を使います。style 属性 (<p style="font-size: 20px;">) か、スタイルシートのルールを追加します。1990 年代の <font size="5"> タグは廃止されていて、現代のページで使う理由はありません。
font-size に使える単位
| 値 | 例 | 基準 |
|---|---|---|
px | 16px | なし: 固定サイズ |
rem | 1.25rem | ルートの <html> 要素の文字サイズ (初期値は 16px) |
em | 1.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 に切り替えましょう。