本文へスキップ
FluidClamp
言語: 日本語

CSS clamp() で作るフルードタイポグラフィ:ガイドとジェネレーター

フルードタイポグラフィは、ブレークポイントで段階的に切り替えるのではなく、小さな画面から大きな画面まで文字をなめらかに変化させる手法です。ジェネレーターで値を作り、読みやすくアクセシブルなサイズの選び方を学びましょう。

入力単位
出力単位

よく使うプリセット

clamp() の値

clamp(1.125rem, 0.8333rem + 1.4583vw, 2rem)

傾き: 1.4583vw · 切片: 0.8333rem

CSS
clamp(1.125rem, 0.8333rem + 1.4583vw, 2rem)
CSS カスタムプロパティ
--fluid-size: clamp(1.125rem, 0.8333rem + 1.4583vw, 2rem);
Tailwind クラス
text-[clamp(1.125rem,0.8333rem_+_1.4583vw,2rem)]

最大値は最小値の 1.78 倍で、WCAG 1.4.4「テキストのサイズ変更」の目安である 2.5 倍以内です。

ビューポート別の表示サイズ
ビューポートサイズ (px)サイズ (rem)
320px181.125
375px18.81.1751
768px24.531.5333
1024px28.271.7667
1280px322
1440px322
1920px322

設定は URL に保存されるので、この結果をそのままブックマークしたり共有したりできます。

ライブプレビュー

ビューポート 1024px で 28.27px

フルードな文字は画面に合わせてなめらかに変化します。

フルードタイポグラフィとは

従来のレスポンシブな文字組みでは、いくつかの固定サイズを用意し、メディアクエリで切り替えていました。スマートフォンは 16px、タブレットは 18px、デスクトップは 20px といった具合です。フルードタイポグラフィは、この段差をビューポート幅に応じて連続的に変わる関数に置き換えます。CSS clamp() を使えばルール全体が 1 行に収まり、2 つの端点の間のあらゆる幅に対して、ブラウザが適切なサイズを計算してくれます。

clamp() の背後にある計算式

フルードなサイズは、(最小ビューポート, 最小サイズ)と(最大ビューポート, 最大サイズ)の 2 点を通る直線です。傾き =(最大サイズ − 最小サイズ)÷(最大ビューポート − 最小ビューポート)で、これに 100 を掛けると vw の係数になります。切片 = 最小サイズ − 傾き × 最小ビューポートです。結果は clamp(最小サイズ, 切片 + 傾き·100vw, 最大サイズ) となります。上のジェネレーターはまさにこの計算を行い、指定した桁数で丸めています。

サイズの選び方

本文の文字サイズは、それほど大きく変える必要はありません。16〜18px や 16〜20px で、ほとんどの読み物レイアウトに対応できます。フルード化の恩恵が大きいのは見出しです。ノートパソコンで映える 48px の見出しも、スマートフォンでは画面の半分を占めてしまいます。いちばん大きな見出しから順に決め、文字が小さいほど最小値と最大値の比率を小さくするのがコツです。

ビューポートの範囲は、端末の一覧ではなくレイアウトから決めましょう。最小値は 320px か 360px が一般的です。最大値は、コンテンツのコンテナが max-width に達する幅です。それ以上では行の長さが伸びないので、フォントサイズも大きくし続ける必要はありません。

アクセシビリティのチェックリスト

最小値・最大値・切片を rem で指定し、ユーザーのフォント設定が反映されるようにします。200% にズームして WCAG 1.4.4 を確認しましょう。最大値が最小値の約 2.5 倍を超えると、ズームで文字が十分に大きくならないおそれがあり、ツールが警告を表示します。行の高さは相対値(例:1.5)にしてフォントサイズに連動させ、最も長い単語を最も狭い画面で確認してください。

よくある質問

フルードタイポグラフィはアクセシビリティを損ないますか?

rem を使い、比率を控えめにすれば問題ありません。問題が起きるのは vw だけでサイズを指定した場合や、最小と最大のビューポート間で約 2.5 倍を超えて大きくなる場合で、ブラウザのズームの効果が弱まります。

メディアクエリはもう不要ですか?

フォントサイズに関しては、たいてい不要です。1 カラムから 2 カラムへの切り替えのような、レイアウトの変更には引き続き使いましょう。

clamp() はどのブラウザで使えますか?

Chrome、Edge、Firefox、Safari は 2020 年から clamp() に対応しており、本番環境でも安心して使えます。古いブラウザは宣言を無視するだけなので、直前に固定サイズのフォールバックを書いておくこともできます。

行の高さもフルードにすべきですか?

見出しは 1.2、本文は 1.5 のように単位なしの値を使いましょう。そうすればフルードなフォントサイズに合わせて自動的に変化します。