CSS の font-size プロパティはフォントサイズを定義します。このプロパティは em や ex、および様々なその他の相対的な <length> の単位の計算にも使用されます。
このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 https://github.com/mdn/interactive-examples をクローンしてプルリクエストを送信してください。
構文
/* <absolute-size> 値 */ font-size: xx-small; font-size: x-small; font-size: small; font-size: medium; font-size: large; font-size: x-large; font-size: xx-large; /* <relative-size> 値 */ font-size: smaller; font-size: larger; /* <length> 値 */ font-size: 12px; font-size: 0.8em; /* <percentage> 値 */ font-size: 80%; /* グローバル値 */ font-size: inherit; font-size: initial; font-size: unset;
font-size プロパティは、以下の何れかの方法で指定します。
値
xx-small,x-small,small,medium,large,x-large,xx-large- ユーザーの既定のフォントサイズ (つまり
medium) を基準とした絶対的なサイズのキーワードです。 larger,smaller- 相対的なサイズのキーワードです。フォントは親要素のフォントサイズから相対的に、上記の絶対的サイズのキーワードで使われている倍率におよそ沿う形で拡大または縮小されます。
<length>-
正の
<length>の値。 (emやexなどの) フォント相対単位のほとんどは、親要素のフォントサイズに対する相対値です。(
remなどの) ルートを基準としたフォント相対単位では、フォントサイズは<html>(ルート) 要素で使われているフォントのサイズからの相対値です。 <percentage>-
正の
<percentage>値で、親要素のフォントサイズからの相対値です。
メモ: アクセシビリティを最大化するために、一般的に最適なのは、ユーザーの既定のフォントサイズからの相対値を使用することです。
形式文法
<absolute-size> | <relative-size> | <length-percentage>where
<absolute-size> = xx-small | x-small | small | medium | large | x-large | xx-large | xxx-large
<relative-size> = larger | smaller
<length-percentage> = <length> | <percentage>
可能なアプローチ
フォントサイズの定義にはいくつかの方法があり、キーワードと数値 (ピクセルや em の場合) が使われます。個々のウェブページで必要とされるものにあわせて、最適な方法を選んでください。
キーワード
キーワードはウェブのフォントサイズを決める良い方法です。 <body> 要素のフォントサイズをキーワードで定義すると、ページのどこであってもフォントサイズを相対的に調整することができ、したがってページ全体のフォントサイズの拡大縮小が容易にできます。
ピクセル
ピクセル値 (px) でフォントサイズを設定することは、ピクセル精度が必要な場合に適しています。ピクセル値は静的です。これは OS にもブラウザーにも依存しない方法であり、ブラウザーに文字を指定した高さのピクセルの数値で描画することを厳密に指示します。ブラウザーによって、同じ効果を得るのに異なるアルゴリズムが使われている可能性があるため、結果は多少異なるかもしれません。
フォントサイズの指定を組み合わせることもできます。例えば親要素のフォントサイズを 16px 、子要素を larger とした場合、子要素のフォントサイズは親要素の 16px より大きくレンダリングされます。
px で定義すると、ユーザーがブラウザーでフォントサイズを変更することができないため、アクセシブルはありません。例えば、弱視の人は、ウェブデザイナーが選んだサイズより大きなフォントにしたいかもしれません。こうした配慮のあるデザインをしたい場合は、フォントサイズにピクセルを使わないようにしてください。em
フォントサイズを設定するもうひとつの方法は em 値を使うものです。 em 値の大きさは動的です。font-size プロパティを定義するとき、 1em はその要素の親要素で用いられているフォントサイズと一致します。ページ内でまだフォントサイズをセットしていなければ、ブラウザーの既定値、たいてい 16px が使われます。したがって、既定では 1em = 16px であり、2em = 32px です。もし body 要素で font-size を 20px にセットすれば、1em = 20px で 2em = 40px です。本質的には、値の 2 が現在の em の大きさの乗数であることに注意してください。
必要なピクセル値に相当する em は、次の式で計算することができます。
em = 要素に設定したい pixel 値 / 親要素の pixel 単位でのフォントサイズ
例えば、 body のフォントサイズが 1em にセットされているものとすると、ブラウザー標準の 1em = 16px です。使いたいフォントサイズが 12px なら、 0.75em を指定します (12/16 = 0.75 だからです)。同様に、使いたいフォントサイズが 10px なら、 0.625em を指定します (10/16 = 0.625)。22px なら 1.375em です (22/16)。
em は読者が選んだフォントに自動的に再調整されるため、CSS ではとても便利な単位です。
em 値が複合的であるということは、覚えておくべき重要な事実です。以下の HTML と CSS をご覧ください。
html {
font-size: 62.5%; /* font-size 1em = 10px on default browser settings */
}
span {
font-size: 1.6em;
}
<div> <span>Outer <span>inner</span> outer</span> </div>
結果は以下のようになります。
ブラウザーの既定の font-size が 16px と仮定すると、単語 “outer” は 16px で描画され、単語 “inner” は 25.6px で描画されます。これは、内側の <span> 要素の font-size は 1.6em ですが、これは親要素の font-size からの相対値で、さらにその親要素の font-size からの相対値になるからです。これはよく複合と呼ばれます。
rem
rem 値は、複合の問題を避けるために考案されました。 rem 値は親要素ではなく、ルート html 要素に対して相対的です。言い換えると、親要素のサイズの影響を受けることなく相対的な方法でフォントサイズを指定できますので、複合が発生しません。
以下の CSS は、先ほどの例とほぼ同じです。唯一の違いは、単位を rem に変更したことです。
html {
font-size: 62.5%; /* font-size 1em = 10px on default browser settings */
}
span {
font-size: 1.6rem;
}
この CSS を同じ HTML に適用すると、以下のようになります:
<span>Outer <span>inner</span> outer</span>
この例では、単語 “outer inner outer” はすべて 16px で表示されます (ブラウザーの font-size は既定値が 16px のままであるとします)。
例
例 1
/* 段落のテキストを非常に大きなものにします */
p { font-size: xx-large }
/* h1 のフォントサイズを、周囲のテキストの 2.5 倍にします
*/
h1 { font-size: 250% }
/* span タグに囲まれたテキストを 16px にします */
span { font-size: 16px; }
例 2
CSS
.small {
font-size: xx-small;
}
.larger {
font-size: larger;
}
.point {
font-size: 24pt;
}
.percent {
font-size: 200%;
}
HTML
<h1 class="small">Small H1</h1> <h1 class="larger">Larger H1</h1> <h1 class="point">24 point H1</h1> <h1 class="percent">200% H1</h1>
結果
メモ
em と ex の単位を font-size プロパティで使うと、親要素のフォントサイズからの相対値になります (要素のフォントサイズからの相対値を使用する、他のプロパティとは異なります)。これは em 単位とパーセント値が、 font-size に関しては同じものであるということです。
仕様書
| 仕様書 | 状態 | 備考 |
|---|---|---|
| CSS Fonts Module Level 3 font-size の定義 |
勧告候補 | 変更なし |
| CSS Transitions font-size の定義 |
草案 | font-size をアニメーション可能として定義 |
| CSS Level 2 (Revision 1) font-size の定義 |
勧告 | 変更なし |
| CSS Level 1 font-size の定義 |
勧告 | 初回定義 |
| 初期値 | medium |
|---|---|
| 適用対象 | すべての要素。 ::first-letter and ::first-line にも適用されます。 |
| 継承 | あり |
| パーセンテージ | 親要素の font-size |
| メディア | 視覚 |
| 計算値 | 指定通り。ただし相対的 length は絶対的 length に変換 |
| アニメーションの種類 | length |
| 正規順序 | 形式文法で定義される一意のあいまいでない順序 |
ブラウザーの対応
| デスクトップ | モバイル | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
font-size | Chrome 完全対応 1 | Edge 完全対応 12 | Firefox 完全対応 1 | IE 完全対応 5.5 | Opera 完全対応 7 | Safari 完全対応 1 | WebView Android 完全対応 1 | Chrome Android 完全対応 18 | Firefox Android 完全対応 4 | Opera Android 完全対応 10.1 | Safari iOS 完全対応 1 | Samsung Internet Android 完全対応 1.0 |
rem values | Chrome 完全対応 31 | Edge 完全対応 12 | Firefox
完全対応
31
| IE
完全対応
11
| Opera 完全対応 28 | Safari 完全対応 7 | WebView Android 完全対応 4.1 | Chrome Android 完全対応 42 | Firefox Android 完全対応 31 | Opera Android 完全対応 28 | Safari iOS 完全対応 7 | Samsung Internet Android 完全対応 4.0 |
xxx-large keyword | Chrome 完全対応 79 | Edge 完全対応 79 | Firefox 完全対応 70 | IE 未対応 なし | Opera 未対応 なし | Safari 未対応 なし | WebView Android 完全対応 79 | Chrome Android 完全対応 79 | Firefox Android 未対応 なし | Opera Android 未対応 なし | Safari iOS 未対応 なし | Samsung Internet Android 未対応 なし |
凡例
- 完全対応
- 完全対応
- 未対応
- 未対応
- 実装ノートを参照してください。
- 実装ノートを参照してください。