CSSのcalc()関数の使い方【動的な計算をCSSで】

CSS calc()関数の使い方を初心者向けに解説。異なる単位の混合計算・レスポンシブ活用・min/max/clampとの組み合わせをコード例で紹介。中高生向け。無料。

2026年4月16日

calc()とは?「100%から固定値を引く」ができる関数

「親要素の幅いっぱいにしたいけど、左右に16pxずつ余白を残したい」「画面の高さからヘッダー分を引いた高さにしたい」——こんな計算、CSSでできたら便利ですよね。

CSSの calc()(カルク) 関数を使えば、%px など異なる単位を混ぜた計算ができます。レスポンシブデザインの必須テクニックです。

この記事では、calc()の基本構文から実践的なレイアウトパターン、min()/max()/clamp()との組み合わせまで解説します。

基本構文と四則演算のルール

/* 基本構文 */
width: calc(100% - 32px);

四則演算

.box {
  width: calc(100% - 32px);    /* 引き算 */
  height: calc(100vh - 64px);  /* 画面高さ - ヘッダー */
  padding: calc(16px + 1vw);   /* 足し算 */
  margin: calc(16px * 2);      /* 掛け算 → 32px */
  font-size: calc(48px / 3);   /* 割り算 → 16px */
}

⚠️ 重要ルール: +- の前後には必ずスペースを入れてください。

/* NG: スペースがないとエラー */
width: calc(100%-32px);

/* OK: スペースあり */
width: calc(100% - 32px);

*/ はスペースなしでも動きますが、統一してスペースを入れるのが読みやすいです。

異なる単位を混合できる理由

通常のCSSでは 100% - 32px のような計算はできません。calc()を使うと、ブラウザが描画時(レンダリング時)に実際のピクセル値を計算してくれます。

ネスト(入れ子)

/* calc()の中にcalc()を入れられる */
width: calc(calc(100% - 40px) / 3);

/* ただし、括弧だけでもOK */
width: calc((100% - 40px) / 3);

実践コード例①:サイドバー固定幅 + メインコンテンツ可変幅

.layout {
  display: flex;
  gap: 24px;
}

.sidebar {
  width: 240px;
  flex-shrink: 0; /* 縮まないようにする */
}

.main {
  /* サイドバー240px + gap24pxを引いた残り */
  width: calc(100% - 240px - 24px);
}

Flexboxとの組み合わせでよく使うパターンです。Flexboxの基本はCSSフレックスボックス入門で学べます。

実践コード例②:ヘッダー高さを引いた全画面セクション

.header {
  height: 60px;
  position: fixed;
  top: 0;
  width: 100%;
}

.hero {
  /* 画面の高さからヘッダー分を引く */
  height: calc(100vh - 60px);
  margin-top: 60px; /* ヘッダーの下に配置 */
  display: flex;
  align-items: center;
  justify-content: center;
}

/* CSS変数と組み合わせるとさらに便利 */
:root {
  --header-height: 60px;
}

.hero {
  height: calc(100vh - var(--header-height));
  margin-top: var(--header-height);
}

CSS変数と組み合わせると、ヘッダーの高さを変えたときに1箇所直すだけで済みます。変数の使い方はCSSカスタムプロパティ入門を参照してください。

実践コード例③:グリッドのgapを考慮した幅計算

.grid {
  display: flex;
  flex-wrap: wrap;
  gap: 16px;
}

/* 3列レイアウト: gapの分を引いて3等分 */
.grid-item {
  width: calc((100% - 16px * 2) / 3);
  /* 3列 → gap2つ分(32px)を引いて3で割る */
}

/* 2列レイアウト */
.grid-item--half {
  width: calc((100% - 16px) / 2);
}

CSS Gridを使えばこの計算は不要ですが、Flexboxで列数を制御したいときに便利です。Gridの使い方はCSSグリッドレイアウト入門で学べます。

min()・max()・clamp()との組み合わせ

/* min(): 小さい方を使う(最大幅の制限) */
.container {
  width: min(100% - 32px, 960px);
  /* 画面幅-32pxと960pxの小さい方 */
}

/* max(): 大きい方を使う(最小幅の保証) */
.text {
  font-size: max(16px, 1.2vw);
  /* 16pxと1.2vwの大きい方 */
}

/* clamp(): 最小・推奨・最大を1行で指定 */
.title {
  font-size: clamp(1.2rem, 4vw, 2.5rem);
  /* 最小1.2rem、推奨4vw、最大2.5rem */
}

/* clamp()でレスポンシブな余白 */
.section {
  padding: clamp(16px, 5vw, 64px);
}

clamp()はレスポンシブデザインで特に便利です。詳しくはレスポンシブデザインの作り方を参照してください。

よくある間違い・注意点

❌ +と-の前後にスペースがない

最もよくあるミスです。calc(100%-32px) はエラーになります。必ず calc(100% - 32px) と書きましょう。

❌ 0で割る

calc(100% / 0) は無効な値(invalid)になります。

%の基準は親要素のサイズ

width: calc(50% - 16px) の50%は「親要素の幅の50%」です。heightの%は親要素に高さが指定されていないと効きません。サイズ指定の基本はmarginとpaddingの違いで復習できます。

ブラウザ対応状況

calc()は全モダンブラウザで対応しています。min()/max()/clamp()もChrome・Firefox・Safari・Edgeで使えます。

calc()を使うときの注意点

calc()を使うときに気をつけるポイントを紹介します。

注意点1:演算子の前後にスペースが必要

calc(100% - 20px)のように、マイナスやプラスの前後には必ず半角スペースを入れます。calc(100%-20px)のようにスペースがないと、正しく計算されません。掛け算(*)と割り算(/)はスペースなしでも動きますが、統一してスペースを入れる癖をつけましょう。

注意点2:単位の異なる値を混ぜられる

calc()の最大の強みは、pxと%のように異なる単位を混ぜて計算できることです。たとえば「画面幅の100%から固定のサイドバー250pxを引く」といった計算ができます。通常のCSSでは異なる単位の計算はできないので、calc()ならではの機能です。

注意点3:入れ子にもできる

calc()の中にさらにcalc()を書くこともできます。ただし、複雑になりすぎると読みにくくなります。CSS変数と組み合わせて、計算の意味がわかりやすいコードを書きましょう。

注意点4:ゼロで割らない

割り算でゼロを指定すると、スタイルが無効になります。変数を使うときは、値がゼロにならないか確認しましょう。

まとめ

  • calc() で異なる単位(%とpx等)を混ぜて計算できる
  • +- の前後には必ずスペースを入れる
  • 100vh - ヘッダー高さ のようなレイアウト計算に便利
  • ✅ CSS変数と組み合わせると保守性が上がる
  • clamp(最小, 推奨, 最大) でレスポンシブな値を1行で書ける

calc()はレスポンシブデザインの必須テクニックです。CSSの基礎全体はCSSとは?初心者向け解説で学べます。

関連記事

📐 CSS単位の換算を実際に確認しよう!

calc() で組み合わせる前に、各単位の実際の値を確認しておくと便利です。

CSS 単位コンバーター →

🎯 次のステップ

calc()を使いこなしたら、CSS変数と組み合わせてもっと柔軟なデザインを作ろう!

CSSカスタムプロパティ入門へ →
目次

コースで実際に手を動かして学ぼう

レッスンではコードを書きながら基礎が身につきます

HTMLコースを始める →

この記事に出てくる用語

📣 この記事が役に立ったら

Xでシェア

💬 引用する場合はこちらをご利用ください:

CSS calc()関数の使い方を初心者向けに解説。異なる単位の混合計算・レスポンシブ活用・min/max/clampとの組み合わせをコード例で紹介。中高生向け。無料。

出典: https://start-web-programming.com/blog/css-calc/