フォントスタック設計は「どの環境でも破綻しない文字の見え方」を作る技術
フォントスタック(font-family の並び順)は、
「ユーザーの環境にフォントが無いとき、どのフォントにフォールバックするか」
を決める“保険の設計”です。
Web では、ユーザーの OS・ブラウザ・言語設定がバラバラなので、
「指定したフォントが必ず使われる」ことはほぼありません。
だからこそ、
「第一候補 → 第二候補 → 第三候補 → 最終的に汎用フォント」
という順番を丁寧に設計することが大切です。
ここでは、CSS と Tailwind CSS の両方で、
初心者でも迷わない“実務レベルのフォントスタック設計”を解説します。
フォントスタックの基本構造
CSS の基本形
body {
font-family: "Inter", "Helvetica Neue", Arial, sans-serif;
}
CSS意味はこうです。
- Inter があれば使う
- なければ Helvetica Neue
- それもなければ Arial
- 最後に sans-serif(OS の標準サンセリフ)
左から順に「使えるフォント」を探していくのがポイントです。
Tailwind の基本形
Tailwind では font-sans などのプリセットが用意されています。
<body class="font-sans">
HTMLデフォルトの font-sans は、Tailwind が推奨する
「OSごとに最適化されたサンセリフスタック」になっています。
例1:Webフォント+安全なフォールバック
CSS 版
body {
font-family:
"Inter",
-apple-system,
BlinkMacSystemFont,
"Segoe UI",
Roboto,
"Helvetica Neue",
Arial,
sans-serif;
}
CSS深掘りポイント:OSごとの最適フォント
-apple-system→ macOS / iOS の San FranciscoBlinkMacSystemFont→ Chrome on macOS"Segoe UI"→ WindowsRoboto→ Android"Helvetica Neue"→ 古い macOSArial→ 最後の保険
これにより、
「Webフォントが読み込めなかったときでも、OS標準の美しいフォントで表示される」
という安心設計になります。
Tailwind 版
Tailwind の font-sans はすでにこの考え方を採用しています。
<body class="font-sans">
HTMLTailwind のデフォルトスタック(抜粋)
ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont,
"Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif
Webフォントを追加したい場合は、Tailwind の設定で上書きします。
// tailwind.config.js
module.exports = {
theme: {
fontFamily: {
sans: [
"Inter",
"ui-sans-serif",
"system-ui",
"-apple-system",
"BlinkMacSystemFont",
"Segoe UI",
"Roboto",
"Helvetica Neue",
"Arial",
"Noto Sans",
"sans-serif",
],
},
},
};
JavaScript例2:日本語フォントを含むフォントスタック
日本語は OS ごとに標準フォントが違うため、
日本語サイトでは必ず日本語フォントを含める必要があります。
CSS 版
body {
font-family:
"Noto Sans JP",
"Hiragino Sans",
"Yu Gothic",
"Meiryo",
sans-serif;
}
CSS深掘りポイント:日本語フォントの優先順位
"Noto Sans JP"→ Webフォント or Android"Hiragino Sans"→ macOS"Yu Gothic"→ Windows"Meiryo"→ Windows(古い環境)sans-serif→ 最終フォールバック
日本語フォントは OS によって太さや字幅が大きく違うため、
「どの環境でも破綻しない」ように順番を工夫します。
Tailwind 版
Tailwind の設定で日本語フォントを追加します。
// tailwind.config.js
module.exports = {
theme: {
fontFamily: {
sans: [
"Noto Sans JP",
"Hiragino Sans",
"Yu Gothic",
"Meiryo",
"sans-serif",
],
},
},
};
JavaScriptHTML 側は変わらず font-sans を使うだけです。
<body class="font-sans">
HTML例3:見出し用フォントと本文用フォントを分ける
CSS 版
body {
font-family:
"Noto Sans JP",
"Hiragino Sans",
"Yu Gothic",
"Meiryo",
sans-serif;
}
h1, h2, h3 {
font-family:
"Montserrat",
"Helvetica Neue",
Arial,
sans-serif;
}
CSS見出しは欧文フォント、本文は日本語フォントという構成はよく使われます。
Tailwind 版
// tailwind.config.js
module.exports = {
theme: {
fontFamily: {
sans: ["Noto Sans JP", "Hiragino Sans", "Yu Gothic", "Meiryo", "sans-serif"],
heading: ["Montserrat", "Helvetica Neue", "Arial", "sans-serif"],
},
},
};
JavaScript<h2 class="font-heading text-2xl font-bold">見出し</h2>
<p class="font-sans">本文テキスト</p>
HTML例4:等幅フォント(コード表示用)のスタック
CSS 版
code, pre {
font-family:
"Fira Code",
"Source Code Pro",
Menlo,
Consolas,
"Courier New",
monospace;
}
CSSTailwind 版
module.exports = {
theme: {
fontFamily: {
mono: [
"Fira Code",
"Source Code Pro",
"Menlo",
"Consolas",
"Courier New",
"monospace",
],
},
},
};
JavaScript<pre class="font-mono text-sm">
console.log("Hello");
</pre>
HTMLフォントスタック設計の「本質的な考え方」(ここが一番大事)
1. 第一候補(Webフォント)が読み込めない前提で考える
Webフォントはネットワーク状況で読み込めないことがあります。
だからこそ、第二・第三候補の品質がとても重要です。
2. OSごとの標準フォントを理解する
OS によって標準フォントは違います。
macOS → San Francisco / Hiragino
Windows → Segoe UI / Yu Gothic / Meiryo
Android → Roboto / Noto Sans
iOS → San Francisco
これを踏まえてスタックを組むと、どの環境でも破綻しません。
3. 日本語フォントは欧文フォントより差が大きい
日本語フォントは
- 太さ
- 字幅
- 行間
が OS ごとに大きく違うため、
日本語サイトでは必ず日本語フォントを含めるのが鉄則です。
4. Tailwind では「fontFamily を設定して font-sans を上書き」が最も実務的
Tailwind の font-sans を上書きしておけば、
全ページで統一されたフォントスタックが使えます。
実務テンプレート:日本語サイト向けフォントスタック(Tailwind)
// tailwind.config.js
module.exports = {
theme: {
fontFamily: {
sans: [
"Inter",
"Noto Sans JP",
"Hiragino Sans",
"Yu Gothic",
"Meiryo",
"sans-serif",
],
heading: [
"Montserrat",
"Inter",
"Helvetica Neue",
"Arial",
"sans-serif",
],
mono: [
"Fira Code",
"Source Code Pro",
"Menlo",
"Consolas",
"Courier New",
"monospace",
],
},
},
};
JavaScriptまとめ
フォントスタック設計は、
「どの環境でも破綻しない文字の見え方」を作るための基礎技術です。
ポイントは次の通りです。
- 第一候補(Webフォント)が使えない前提で考える
- OSごとの標準フォントを理解して順番を決める
- 日本語サイトでは必ず日本語フォントを含める
- Tailwind では fontFamily を設定して font-sans を上書きする
- 見出し・本文・コードでフォントを分けると読みやすさが向上する


