A function that keeps values in a “just right” range—set a minimum, a preferred, and a maximum—so things like font size or width scale smoothly without going too small or too big.
clamp() は、
の3つを並べて、理想を目指しつつも「行き過ぎない」値にしてくれる関数です。
CSS
/* 画面が小さい時は小さすぎず、大きい時は大きすぎない */
html {
font-size: clamp(14px, 2.5vw, 20px);
}
CSS
/* rem を土台に、画面幅 2vw 分だけ上乗せするイメージ */
h1 {
font-size: clamp(1.25rem, calc(1rem + 2vw), 2rem);
}
CSS
.card {
width: clamp(280px, 50vw, 640px);
margin-inline: auto;
}
注意
vw・vh・rem は相性◎。calc() と組み合わせると、より思い通りに動きます。CSS
/* ヒーロー見出し:スマホで大きすぎず、PCで小さすぎない */
.hero-title {
font-size: clamp(1.5rem, 1rem + 3vw, 3rem);
}
/* 余白:狭小画面で詰めすぎない/広画面で広がりすぎない */
.section {
padding-block: clamp(16px, 3vh, 64px);
}
/* カードの列幅:小さすぎないカード、広すぎない列 */
.grid {
grid-template-columns: repeat(auto-fit, minmax(clamp(180px, 30vw, 320px), 1fr));
}
min(a, b)max(a, b)clamp(min, ideal, max)→ “動かす+はみ出し防止” を1行で書けるのが clamp()。
16px など固定だと“伸び縮み”しない。2vw や calc() を使う。html{font-size:...} は全体に影響。h1等ピンポイント指定も検討。min() / max() と何が違う?min/max は“どちらか一方を選ぶ”関数、clamp() は“理想を目指しつつ範囲に収める”関数です。1rem と 2vw)。ただし意味の合わない型混在は避けます。clamp() で多くの“いい感じ調整”はできますが、断点でガラッと変えるデザインには @media も使います。clamp(24px, 10px, 16px)font-size: clamp(1rem, 50%, 2rem)font-size の % は親要素基準で想定外の伸縮になることも)。16px)2vw や calc() を使う。html 直指定をやめ、対象の見出し等に限定。