CSS

CSS calc()の使い方|四則演算・CSS変数・clamp()との使い分け

CSS calc()で異なる単位を計算する方法を解説。四則演算の空白ルール、CSS変数との組み合わせ、固定ヘッダーを引く高さ、clamp()・min()・max()との使い分けを紹介します。

この記事の目次
  1. 結論:まず押さえるポイント
  2. CSS calc()の使い方の基本
  3. 最小の実装例
  4. HTML
  5. CSS
  6. 実務で使うときの考え方
  7. 固定ヘッダーを除いた最小高さ
  8. clamp()との組み合わせ
  9. calc()・min()・max()・clamp()の使い分け
  10. よくある失敗と直し方
  11. calc(100%-2rem)と詰めて書く
  12. heightを画面高に固定する
  13. 複雑な計算を重ねる
  14. WordPressで使う場合
  15. よくある質問
  16. calc()の中にCSS変数を使えますか?
  17. calc()はパフォーマンスが悪いですか?
  18. Sassの計算と何が違いますか?
  19. まとめ
  20. 関連する基礎記事
  21. 参照した公式資料

calc()は「100%から固定余白を引く」のように、単位が異なる値をブラウザ上で計算するときに使います。足し算と引き算の演算子の前後には空白が必要です。単純な最大・最小・範囲指定ならmin()max()clamp()も検討します。

情報確認日:2026年7月27日

結論:まず押さえるポイント

この記事の結論

  • 異なる単位を組み合わせた計算に使う
  • +と-の前後には空白を入れる
  • CSS変数と組み合わせて意味を明確にする
  • 固定heightの多用は内容あふれに注意する
スポンサーリンク

CSS calc()の使い方の基本

width: calc(100% - 2rem)は、親幅から左右余白に相当する2remを引きます。掛け算は少なくとも一方が数値、割り算は右側が数値である必要があります。計算結果は、指定先のプロパティが受け付ける型にそろえます。

最小の実装例

HTML

<div class="layout">
  <aside class="sidebar">メニュー</aside>
  <main class="content">本文</main>
</div>

CSS

:root {
  --sidebar-width: 16rem;
  --gap: 2rem;
}

.sidebar {
  width: var(--sidebar-width);
}

.content {
  width: calc(100% - var(--sidebar-width) - var(--gap));
}

2列レイアウトだけならGridの方が簡潔な場合があります。calcは「計算が必要だから使う」のであり、レイアウトの第一選択とは限りません。

実務で使うときの考え方

固定ヘッダーを除いた最小高さ

.page-main { min-height: calc(100dvh - var(--header-height, 4rem)); }

モバイルではアドレスバーを考慮したdvhなどのビューポート単位を検討します。内容が増えるためheightではなくmin-heightが安全です。

clamp()との組み合わせ

.hero { padding-block: clamp(2rem, calc(1rem + 4vw), 6rem); }

calc()・min()・max()・clamp()の使い分け

関数 用途
calc() 値を四則演算する
min() 候補の小さい値を採用する
max() 候補の大きい値を採用する
clamp() 最小・推奨・最大の範囲へ収める

よくある失敗と直し方

calc(100%-2rem)と詰めて書く

+と-の前後には空白が必要です。空白がないと宣言全体が無効と判定され、無視されます。

heightを画面高に固定する

文字拡大や内容増加で切れます。min-heightと自然なスクロールを使います。

複雑な計算を重ねる

CSS変数へ意味のある中間値を分けるか、Grid・Flexboxで解決できないか見直します。

WordPressで使う場合

WordPressの管理バーやテーマヘッダーの高さを固定値で引くと、ログイン状態や折り返しでずれます。可能ならレイアウトで自然に積み、どうしても必要ならCSS変数を実測値と同期します。

よくある質問

calc()の中にCSS変数を使えますか?

使えます。変数に単位が含まれるかを確認し、計算後にプロパティが受け付ける型になるようにします。

calc()はパフォーマンスが悪いですか?

通常のレイアウトで過度に心配する必要はありません。ただしアニメーションで頻繁にレイアウト計算を起こす指定は別途検証します。

Sassの計算と何が違いますか?

Sassはビルド時、calc()はブラウザのレイアウト時に計算します。%やvwなど実行時に決まる値を扱える点が違います。

まとめ

calc()は異なる単位の実行時計算に使い、+と-の空白を守ります。用途が最大・最小・範囲ならmin()・max()・clamp()を選び、固定高より内容に追従する設計を優先してください。

関連する基礎記事

参照した公式資料

スポンサーリンク