Files
2nd/10_Wiki/Topic_Programming/Architecture/Fluid_Typography.md
T
Antigravity Agent 9148c358d0 docs(10_Wiki): 위키 전체 재구성 — Topic_* 폴더를 4개 카테고리로 통합 + 대규모 중복 제거
Topic_Agent/Topic_Blog/Topics/Topics_Biz/Topics_Meeting/Topics_Rag의 마크다운 지식 문서를
Topic_General/Topic_Programming/Topic_Graphic/Topic_Business 4개 카테고리로 재분류.

- 중복 제거: frontmatter의 status:duplicate/merged + duplicate_of/redirect_to 필드로
  자기 자신을 중복으로 선언한 리다이렉트 stub 1032개 제거, 완전 동일 내용 파일 472개 제거,
  동일 파일명·다른 내용 충돌 시 더 큰(완전한) 버전만 유지(162개 제거) — 총 1639개 중복 제거.
- 분류: 폴더 단위로 명확한 항목(AI_and_ML/Coding/Architecture 등 → Programming,
  Comfyui/Visual_Effects → Graphic, Topics_Biz/Topics_Meeting/사업 등 → Business,
  Poetic_Blog_Writing/창의성/Game_Design 등 → General)은 폴더 우선순위로,
  나머지 혼재 폴더(Topic_Agent/Topic_Blog/Topics 루트/Thinking & Reasoning/Other/UI_UX_Assets)는
  title/tags 키워드 스코어링으로 파일 단위 분류(불명확한 경우 General로 폴백).
  원본 폴더명은 "From_*" 서브폴더로 보존해 추적 가능성 유지.
- 최종 배치: Programming 2784 / General 1608 / Graphic 285 / Business 249 = 4926개 문서.
- 에이전트 운영 상태(.astra/.agent/.obsidian/sessions/memory/_company/docs/lessons/_shared/src)는
  지식 콘텐츠가 아니므로 재분류 대상에서 제외하고 원위치 유지.
- Topics/Topic_email(상위 보호 폴더 Topic_email과 파일명 100% 중복) 삭제 — 보호 폴더 자체는 미변경.
- 완전히 비게 된 Topic_Agent/Topic_Blog/Topics_Biz/Topics_Rag 폴더 제거.
2026-07-05 00:33:48 +09:00

5.5 KiB
Raw Blame History

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
Fluid Typography
Responsive Typography
Clamp Typography
none A 0.9 applied
css
web
design
responsive
2026-05-10 pending
language framework
css web

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 value
  • max: 매 최대 (large viewport cap)
  • 매 browser가 자동 clamp

매 응용

  1. Modern design systems (Tailwind v4 fluid presets, Open Props).
  2. Editorial sites (NYT, Medium-style readers).
  3. Marketing landing pages.
  4. 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
Email Static (limited CSS)

기본값: 매 clamp() + rem + Utopia.fyi calculator. 매 viewport range 320-1280px 기준.

🔗 Graph

🤖 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