"매 viewport 에 따라 font-size 가 부드럽게 scale 된다". 매 Fluid Typography는 fixed breakpoint 의 jumpy 변화 대신 매 linear interpolation 으로 매 자연스러운 size 변화 — clamp() + vw 가 매 modern standard. 2026 모든 design system 의 default.
매 핵심
매 Why fluid?
Breakpoint jumps: 매 320px → 768px 에서 갑자기 font 12px → 18px (jarring)
Fluid interp: 매 320px = 12px, 1280px = 24px, 매 사이는 linear
Single source of truth: 매 media query × N 대신 매 1 line CSS
매 clamp(min, preferred, max)
min: 매 최소 (small viewport)
preferred: 매 vw 기반 fluid value
max: 매 최대 (large viewport cap)
매 browser가 자동 clamp
매 응용
Modern design systems (Tailwind v4 fluid presets, Open Props).
Editorial sites (NYT, Medium-style readers).
Marketing landing pages.
CSS-in-JS theme tokens.
💻 패턴
Basic clamp() pattern
:root{/* 매 min 1rem (16px), max 1.5rem (24px), fluid 사이 */--fs-body:clamp(1rem,0.875rem+0.625vw,1.5rem);--fs-h1:clamp(2rem,1rem+5vw,5rem);--fs-h2:clamp(1.5rem,1rem+2.5vw,3rem);}body{font-size:var(--fs-body);}h1{font-size:var(--fs-h1);line-height:1.1;}h2{font-size:var(--fs-h2);line-height:1.2;}
Linear interp formula (Utopia.fyi)
// 매 min 320px viewport: 16px font
// 매 max 1280px viewport: 24px font
functionfluidClamp(minPx,maxPx,minVwPx=320,maxVwPx=1280){constslope=(maxPx-minPx)/(maxVwPx-minVwPx);constintercept=minPx-slope*minVwPx;constslopeVw=slope*100;return`clamp(${minPx/16}rem, ${intercept/16}rem + ${slopeVw}vw, ${maxPx/16}rem)`;}console.log(fluidClamp(16,24));// "clamp(1rem, 0.833rem + 0.833vw, 1.5rem)"
Type scale (modular)
:root{--ratio:1.25;/* 매 major third scale */--fs-0:clamp(1rem,0.9rem+0.5vw,1.125rem);--fs-1:calc(var(--fs-0)*var(--ratio));--fs-2:calc(var(--fs-1)*var(--ratio));--fs-3:calc(var(--fs-2)*var(--ratio));--fs--1:calc(var(--fs-0)/var(--ratio));}
<h1class="text-fluid-xl">매 fluid heading</h1><pclass="text-fluid-base">매 body text fluid</p>
Container query fluid (modern)
/* 매 viewport 대신 container 기반 — true component fluidity */.card{container-type:inline-size;}.card-title{font-size:clamp(1rem,4cqi,2rem);/* 매 cqi = container query inline */}
Accessibility-safe (rem floor)
/* 매 user font-size preference 존중 — rem 사용 */:root{--fs-readable:clamp(1rem,0.9rem+0.5vw,1.25rem);/* 매 NOT: clamp(16px, 1vw, 20px) — px ignores user setting */}
Line-height 도 fluid
.prose{font-size:clamp(1rem,0.9rem+0.5vw,1.25rem);/* 매 작은 size 일수록 line-height 더 큼 (readability) */line-height:clamp(1.4,1.6-0.1vw,1.6);/* 매 ch unit으로 measure 제한 */max-width:65ch;}