レッスン 5

clamp() と fluid サイズ

最小、推奨、最大の境界でレスポンシブ font-size とスペーシングを生成します。

clamp()font-sizepaddinggapheight などの数値プロパティについて、多くの段階的メディアクエリを 1 宣言に置き換えられます。

構文

clamp(MIN, PREFERRED, MAX)

ブラウザは次を選びます。

  • 推奨値が小さすぎるとき MIN
  • 推奨値が大きすぎるとき MAX
  • それ以外 PREFERRED

例:

h1 {
  font-size: clamp(1.5rem, 1rem + 2vw, 2.5rem);
}

狭い画面ではタイトルが最低 1.5rem。広い画面では最大 2.5rem。その間はビューポート幅で成長します。

rem + vw を一緒に使う理由

純粋 vw の見出しはモバイルで読めなくなったり、ウルトラワイドで大きすぎたりします。clamp() 内で rem と vw を組み合わせると:

  • rem 最小でアクセシビリティ下限
  • rem 最大でレイアウト上限
  • vw 中間項でfluid 成長

font-size vs スペーシングモード

font-size clamp はテキストリズムと折り返しに影響します。スペーシング clamp はセクション gap、ヒーロー padding、コンポーネント高さに影響します。

同じ数学ですが、プレビューは異なります。

  • font-size プレビューは計算サイズのサンプルテキストを表示
  • スペーシングプレビューは計算高さのバーまたはブロックを表示

出荷前に最小、中間、最大ビューポート幅で必ずプレビューしてください。

デザイン仕様から CSS へ

典型的なワークフロー:

  1. デザイナーがモバイルとデスクトップの min/max px サイズを渡す。
  2. レイアウトブレークポイントに合うビューポート範囲を選ぶ。
  3. clamp(minRem, preferredRem + preferredVw, maxRem) を生成する。
  4. CSS、カスタムプロパティ、SCSS 変数をトークンにコピーする。

出力例:

--heading-lg: clamp(1rem, 0.5rem + 2vw, 1.5rem);

clamp() を使わないとき

  • レイアウト reflow のため正確に 1 ブレークポイントでスナップすべき値
  • 非常に異なるルールの container query で制御されるプロパティ
  • 単純な rem トークンで十分なケース

clamp() は既知の境界間の滑らかなスケーリングが欲しいときに最適です。

要点

clamp()境界付き fluid サイズと考えます。最小可読サイズ、最大デザインサイズ、その間のビューポート駆動成長です。

スタイルシートに追加する前に、CSS Unit Converter / Clamp Generator の clamp タブで clamp 値を生成・プレビューしてください。

実践したいときは関連する DevCove ツールを使えます。任意であり、このレッスンの必須部分ではありません。

関連ツールを開く

コース概要へ戻る