f8b21af4be
10_Wiki/Topics 대규모 정리: - 오류 캡처/미완성 stub 문서 227개 제거 - 교차폴더 중복 43클러스터 병합 (63파일 → redirect) - 링크명 정규화: 깨진 링크 수정·redirect 직결·개념 매핑 ~2,400건 - 카테고리 MOC 6개 신규 생성 - Graph 섹션 미해결 related-keyword 링크 10,058건 제거 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5.5 KiB
5.5 KiB
id, title, category, status, canonical_id, aliases, duplicate_of, source_trust_level, confidence_score, verification_status, tags, raw_sources, last_reinforced, github_commit, tech_stack
| id | title | category | status | canonical_id | aliases | duplicate_of | source_trust_level | confidence_score | verification_status | tags | raw_sources | last_reinforced | github_commit | tech_stack | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| wiki-2026-0508-fluid-typography | Fluid Typography | 10_Wiki/Topics | verified | self |
|
none | A | 0.9 | applied |
|
2026-05-10 | pending |
|
Fluid Typography
매 한 줄
"매 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 valuemax: 매 최대 (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
function fluidClamp(minPx, maxPx, minVwPx = 320, maxVwPx = 1280) {
const slope = (maxPx - minPx) / (maxVwPx - minVwPx);
const intercept = minPx - slope * minVwPx;
const slopeVw = 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));
}
Tailwind v4 fluid (CSS)
@import "tailwindcss";
@theme {
--text-fluid-sm: clamp(0.875rem, 0.8rem + 0.4vw, 1rem);
--text-fluid-base: clamp(1rem, 0.875rem + 0.625vw, 1.25rem);
--text-fluid-lg: clamp(1.125rem, 0.95rem + 0.9vw, 1.5rem);
--text-fluid-xl: clamp(1.5rem, 1rem + 2.5vw, 2.5rem);
}
<h1 class="text-fluid-xl">매 fluid heading</h1>
<p class="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;
}
Spacing 도 fluid (consistency)
:root {
--space-xs: clamp(0.5rem, 0.4rem + 0.5vw, 0.75rem);
--space-sm: clamp(1rem, 0.8rem + 1vw, 1.5rem);
--space-md: clamp(1.5rem, 1.2rem + 1.5vw, 2.25rem);
--space-lg: clamp(2.25rem, 1.8rem + 2.25vw, 3.375rem);
}
매 결정 기준
| 상황 | Approach |
|---|---|
| Marketing site | Fluid type + spacing |
| App UI (dense) | Discrete sizes (consistent UX) |
| Editorial (long-form) | Fluid + max-width 65-75ch |
| Component library | Container query fluid |
| Static (limited CSS) |
기본값: 매 clamp() + rem + Utopia.fyi calculator. 매 viewport range 320-1280px 기준.
🔗 Graph
- 부모: Responsive Design
- 변형: 컨테이너 쿼리 (Container Queries)
- 응용: Design Systems · CSS_Architecture_and_Styling · CSS_Architecture_and_Styling
- Adjacent: Type Scale · Accessibility (A11y)
🤖 LLM 활용
언제: 매 design system token 생성, clamp() formula 계산, breakpoint refactor. 언제 X: 매 email HTML, legacy IE — clamp() unsupported.
❌ 안티패턴
- px in clamp(): 매 user font preference 무시 → 매 a11y 실패.
- No max cap: 매 4K monitor 에서 매 font 너무 큼.
- No min floor: 매 320px 미만 viewport 에서 매 unreadable.
- vw alone: 매
font-size: 2vw— 매 zoom 시 깨짐 (no rem fallback).
🧪 검증 / 중복
- Verified (Utopia.fyi, "Fluid responsive design", 2020).
- Verified (CSS Values L4 spec, clamp() function).
- Verified (Caniuse: clamp() 96%+ global support).
- 신뢰도 A.
🕓 Changelog
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | Manual cleanup — clamp() + container queries + Tailwind v4 |