結論
プロはフォントサイズを 1 つずつ手で決めない。ベース 16px に固定比率(ジャンプ率)を繰り返し掛ける モジュラータイプスケール で全サイズを機械的に導出し、そこから選ぶだけにする。本文中心の UI は Major Third(1.25) 前後、エディトリアル/LP は Perfect Fourth(1.333)〜黄金比(1.618) で見出しのコントラストを強め、レスポンシブは clamp() で補間しつつ max ≤ 2.5×min を守ってアクセシビリティを担保する。
01 — 比率を1つ決めてスケールを生成し、そこから選ぶ
「この見出しは 30px くらい?」と都度決めると、階層もリズムも出ない。やめるべきは「決める」こと自体だ。ベース 16px に固定比率 r を掛け続け(base × ratio^n)、生成された段から選ぶだけにする。Major Third(1.25) なら 16 → 20 → 25 → 31 → 39px。下の悪い例は 30/28/26/24px と近接サイズの寄せ集めで、見出しと本文の差が消えている。良い例は同じ 4 段でも比率生成なので、各段が明確に分離する。
02 — スケール内の2値を約25%より近づけない
「46px か 48px か」で迷うのは、差が小さすぎて視覚的に区別できないからだ。Refactoring UI の指針では、隣接値を約 25% 以上離せば選択が機械的に決まり、行き当たりばったりが消える。これは線形(等差)ではなく指数(比率)ベースにすることと同義で、近接サイズで悩むこと自体が「スケールが等差になっている」サインだ。
secondaryNotes from Refactoring UI
03 — 用途で比率を使い分ける
比率が大きいほどジャンプ率(段階間コントラスト)が強くなる。小要素(ラベル/識別子)は 1.067〜1.125、本文の多い画面は 1.200〜1.333 がスイートスポット、ポスター/プレゼン/大胆なエディトリアルは 1.414〜1.618。ダッシュボードのような密度の高い UI で 1.618 を使うと見出しが巨大化してスペースを浪費するので避ける。下は同じ 3 段を、本文密度の高い UI 向けの控えめな比率と、LP 向けの強い比率で比較したもの。
blog2025 Guide to Responsive Typography — Design Shack
blogWhat Is a Type Scale? — Supercharge
04 — 階層はサイズだけでなくウェイトと色でも作る
サイズ段数を増やす前に、ウェイトと色で差をつける。16px bold のサブヘッダーは 16px regular の本文に十分際立つ。主要要素を目立たせるコツは「二次要素を淡色・小サイズで弱める」(emphasize by de-emphasizing)こと。ただし弱化に weight 400 未満を使ってはいけない——細いウェイトは小サイズで可読性が落ちチープに見えるので、弱めたい要素はサイズ縮小か淡色で対応する。
secondaryNotes from Refactoring UI
05 — clamp()で補間し、max ≤ 2.5×min を守る
レスポンシブな見出しはブレークポイントごとに手書きせず、clamp(min, vw + rem, max) でビューポート間を線形補間する。preferred 値は vw と rem の和で構成し、min/max は rem で指定してユーザーのズーム/ブラウザ設定に追従させる。重要なガードは max ≤ 2.5 × min——ブラウザはズーム時に vw をスケールしないため、純粋な vw や過大な上限は WCAG 1.4.4(テキスト 200% 拡大)に失敗する。下の左は px 固定で巨大化しズームに追従しない例、右は clamp で滑らかに補間する例(ウィンドウ幅を変えると右だけ追従する)。
secondaryModern Fluid Typography Using CSS Clamp — Smashing
secondaryAddressing Accessibility Concerns With Fluid Type — Smashing
実装スニペット
Major Third (1.25) スケール。本文密度の高い UI/アプリ向けの中庸なジャンプ率。
:root{
--fs-base: 1rem; /* 16px */
--ratio: 1.25;
--fs-caption: 0.64rem; /* 約10px = 16/1.25/1.25 */
--fs-small: 0.8rem; /* 約13px */
--fs-body: 1rem; /* 16px */
--fs-h3: 1.25rem; /* 20px */
--fs-h2: 1.5625rem; /* 25px */
--fs-h1: 1.953rem; /* 約31px */
--fs-display: 2.441rem; /* 約39px */
}
body{font-size:var(--fs-body);line-height:1.5;}
h1{font-size:var(--fs-h1);line-height:1.25;}
Perfect Fourth (1.333) スケール。段間の breathing room が大きく、LP/エディトリアル向けの強い視覚階層を作る。
:root{
--fs-body: 1rem; /* 16px */
--fs-h4: 1.333rem; /* 約21px */
--fs-h3: 1.777rem; /* 約28px */
--fs-h2: 2.369rem; /* 約38px */
--fs-h1: 3.157rem; /* 約51px */
--fs-hero: 4.209rem; /* 約67px */
}
fluid な見出し(36px → 52px を 600px → 1400px で補間)。max÷min = 1.44 ≤ 2.5 で WCAG 1.4.4 をパス。
h1{
/* min 2.25rem(36px), max 3.25rem(52px) */
font-size: clamp(2.25rem, 2vw + 1.5rem, 3.25rem);
line-height: 1.2;
}
WCAG ガード付き fluid 本文(Utopia 的な 2 スケール補間、max ≤ 2.5×min を厳守)。
:root{
/* 16px→18px, ユーザー設定に追従するrem基準 */
--step-0: clamp(1rem, 0.5vw + 0.875rem, 1.125rem);
/* 28px→40px, 40/28=1.43 ≤ 2.5 */
--step-3: clamp(1.75rem, 1.5vw + 1.375rem, 2.5rem);
}
body{font-size:var(--step-0);line-height:1.5;}
h2{font-size:var(--step-3);line-height:1.25;}
p{max-width:38em;} /* 1行を詰め込みすぎない */
チェックリスト
- ベース 16px に固定比率を掛けてスケールを生成し、サイズは毎回手で決めず生成段から選んでいる
- 隣接する 2 値が約 25% 以上離れている(46 vs 48 のような近接値で悩んでいない)
- スケールが線形(等差)でなく指数(比率)ベースになっている
- 比率を用途で選んだ(密度の高い UI=1.2〜1.25 / ブログ・LP=1.25〜1.333 / 大胆なエディトリアル=1.414〜1.618)
- 密度の高いアプリで黄金比 1.618 を使って見出しを巨大化させていない
- サイズ段を増やす前に weight・色で階層をつけられないか検討した
- 補助テキストの弱化に weight 400 未満を使っていない(縮小か淡色で対応)
- fluid 化した見出しの min/max を px でなく rem で指定している
- すべての clamp で max ≤ 2.5×min を満たし、200% 拡大に耐える
- 見出し line-height 1.2〜1.3 / 本文 1.5〜1.6、段落幅も詰め込みすぎていない
限界 / 出典
比率 → px の計算例はソースごとに丸め方が異なり微妙にずれる(16×1.25 の上限が 39px の版と 49px の版がある=どのステップを基準に置くかの違い)。提示した px 値は四捨五入の一例で、実装では生成器の出力に従うこと。「max ≤ 2.5×min」と「隣接値 25% 以上」は出典が異なる別ルールで、前者はアクセシビリティ(fluid 時の max/min 比)、後者はスケール設計(隣接段差)の話なので混同しない。Refactoring UI の該当ソースは公式書籍ではなく第三者の GitHub Gist メモであり、weight≥400 や色での弱化は UI 文脈の指針で、装飾的な大見出しには当てはまらない場合がある。日本語タイポでは英文の 45–75 字目安がそのまま適用できず字数感覚が異なる点、本ブリーフのソースが英語圏中心で日本語特有の約物詰め(palt)等は別途考慮が必要な点にも注意。比率の用途区分(LP=1.333 等)は慣習的な定説であり厳密な実証ではない。
blogType Scale Guide: Typography for UI and Material Design — Pacgie
blogWhat Is a Type Scale? How It Works in UI Design — Supercharge
blogThe 2025 Guide to Responsive Typography Sizing and Scales — Design Shack
primaryTypography – Material Design 3
secondaryNotes from Refactoring UI (GitHub Gist)
blogHow do I establish a type scale for my project? — Cieden
blogWhat Is Type Scale? — Art Attackk
secondaryModern Fluid Typography Using CSS Clamp — Smashing Magazine
secondaryAddressing Accessibility Concerns With Using Fluid Type — Smashing Magazine
primaryFluid type scale calculator — Utopia
blogTypographic scaling: Definition, Figma tutorial, and examples — LogRocket