web制作のポイント

モダンCSS関数サンプル集|aspect-ratio / calc / clamp / min / max

更新日:2026-05-19 著者:unigram 読了目安:4分

この記事の要点

aspect-ratio・calc()・clamp()・min()/max() の4つのモダンCSS関数をプレビュー+コード付きで解説。@mediaなしのレスポンシブ対応など実務で使えるテクニックをまとめています。

CSSにはここ数年で実用的になった便利な関数があります。ブラウザ対応が進み、現在は主要ブラウザすべてで使えるようになりました。

この記事では aspect-ratiocalc()clamp()min() / max() の4つをプレビュー+コード付きで解説します。

この記事でわかること

  • aspect-ratio で縦横比をキープする方法
  • calc() で異なる単位を混ぜて計算する方法
  • clamp() で@mediaなしのレスポンシブサイズを実現する方法
  • min() / max() で幅の上限・下限を指定する方法

なぜモダンCSS関数を使うのか

従来は アスペクト比の維持padding-top ハックが必要だったり、レスポンシブなフォントサイズに複数の @media が必要でした。これらのモダンCSS関数を使うと、よりシンプルで意図のわかりやすいコードが書けます。


01

aspect-ratio(アスペクト比)

aspect-ratio: 16 / 9 を指定すると、幅を決めるだけで高さが自動で計算される。動画・サムネイル・アイコンの比率維持に最適。padding-top ハックを使う古い手法は不要になった。

aspect-ratio: 16 / 9aspect-ratio: 1 / 1aspect-ratio: 4 / 3
Preview
16 : 9
1 : 1
4 : 3
↑ 幅を指定するだけで高さが自動計算される
CSS
style.csscopy
.ratio-box {
  width: 50%;             /* 幅だけ決めれば、高さは自動で計算される */
  aspect-ratio: 16 / 9;  /* 幅:高さ = 16:9 の比率を保つ */
}
/* 他によく使う比率 */
.square { aspect-ratio: 1 / 1; }   /* 正方形 */
.four-three { aspect-ratio: 4 / 3; } /* 昔のテレビ比率 */
.thumbnail { aspect-ratio: 3 / 2; }  /* 写真の標準サイズ */
02

calc()(異なる単位を混ぜて計算)

calc()px・%・em・vw などの異なる単位を混ぜて計算できる。「全体幅から固定のサイドバー幅を引いた残りをメインに」のような計算が1行で書ける。

calc(100% – 240px)calc((100% – gap) / 列数)
Preview
calc((100% – 50px) / 2)
左カラム
右カラム
width: calc(100% – 240px)
サイド
80px
メイン(calc(100% – 80px))
CSS
style.csscopy
/* 異なる単位を混ぜた計算が可能 */
.main {
  width: calc(100% - 240px);
  /* 100%(親幅)からサイドバーの240pxを引いた残りがメインの幅 */
}
/* 四則演算(+ - * /)がすべて使える */
.col {
  /* (全体幅 - gap×2)÷ 3列 */
  width: calc((100% - 32px) / 3);
}
/* ※ 演算子の前後にスペースが必要(+ や - は特に注意)*/
.box {
  height: calc(100vh - 60px);  /* 画面高さ - ヘッダー高さ */
}
03

clamp()(最小・推奨・最大を1行で指定)

clamp(最小値, 推奨値, 最大値) の3つの値を指定する。@media なしで画面幅に応じて滑らかに変化するレスポンシブなタイポグラフィやサイズに使う。

clamp(最小値, 推奨値, 最大値)font-size: clamp(20px, 5vw, 48px)
Preview
clamp(20px, 5vw, 48px) — 画面幅で変化
Responsive Text
最小値20px
推奨値5vw
最大値48px
↑ 画面を広げると文字が大きく、狭めると小さくなる(最小・最大の範囲内で)
CSS
style.csscopy
/* clamp(最小値, 推奨値, 最大値) */
.hero-title {
  /* 最小20px、推奨5vw(画面幅の5%)、最大48px */
  /* → 画面が狭いと20px、広がるにつれて大きくなり、48pxで頭打ち */
  font-size: clamp(20px, 5vw, 48px);
}
.container {
  /* 最小320px、推奨90%、最大1200px */
  /* → @media なしでスマホからPCまで対応できる */
  width: clamp(320px, 90%, 1200px);
}
.padding {
  /* 余白もclampで流動的に */
  padding: clamp(16px, 4vw, 48px);
}
04

min() / max()(比較して選択)

min() は指定した値のうち小さい方を採用(最大幅の制限)、max()大きい方を採用(最小幅の確保)。max-widthmin-width を1行で書ける。

min(80%, 600px)max(200px, 30%)
Preview
min(80%, 600px) — 小さい方を採用
上限のある幅
max-widthと同じ効果
max(200px, 30%) — 大きい方を採用
下限のある幅
min-widthと同じ効果
CSS
style.csscopy
/* min():小さい方を採用 → 最大幅の指定と同じ効果 */
.container {
  /* 80% と 600px を比較して小さい方 */
  /* → スマホでは80%幅、PCでは600pxを超えないように */
  width: min(80%, 600px);
  /* max-width: 600px; width: 80%; と同じ意味 */
}
/* max():大きい方を採用 → 最小幅の確保と同じ効果 */
.sidebar {
  /* 200px と 30% を比較して大きい方 */
  /* → 最低でも200pxを確保しつつ、広い画面では30%まで広がる */
  width: max(200px, 30%);
  /* min-width: 200px; width: 30%; と同じ意味 */
}

まとめ

  • aspect-ratio は幅を決めるだけで高さが自動計算される。動画・サムネイルに最適
  • calc() は px と % など異なる単位を混ぜた計算ができる
  • clamp(最小, 推奨, 最大) は @media なしでレスポンシブなサイズ指定が可能
  • min() は小さい方(最大幅の指定)、max() は大きい方(最小幅の確保)を採用
  • 4つともモダンブラウザで広くサポートされており、実務でそのまま使える

 

この記事を書いた人

unigram
web、印刷、映像などの制作をしています。@京都、フリーランス18年目。 大学で講師もしています。 自身の備忘録も兼ねて、Web制作・WordPress・SEO・GA4・生成AI活用をテーマに情報発信しています。わかりやすく優しい内容で記事作成を心がけています。