# [[Fluid Typography]]

## 📌[[ brief]] Summary
Fluid Typography(유동적 타이포그래피)는 고정된 미디어 쿼리 중단점(breakpoint)에서 폰트 크기가 갑자기 변하는 대신, 뷰포트나 컨테이너의 크기에 비례하여 폰트 크기가 매끄럽고 연속적으로 변하도록 만드는 반응형 웹 디자인 기법입니다 [1, 2]. 최신 CSS에서는 `clamp()` 함수와 상대 단위(`vw`, `rem` 등)를 조합하여 사용하며, 기기마다 다른 화면 크기에 맞춰 최적의 가독성을 제공합니다 [1, 3]. 수동으로 여러 개의 중단점을 계산하거나 지정할 필요가 없다는 것이 가장 큰 장점입니다 [4].

## 📖 Core 기Content
*   **작동 원리와 필요성:** 
    기존의 하드 브레이크포인트(hard breakpoint) 기반 타이포그래피는 화면 크기가 변경될 때 폰트 크기가 갑작스럽게 도약(jarring jumps)하는 문제를 발생시킵니다 [1]. 반면 Fluid Typography는 `vw`, `vi`, `cqi`와 같은 뷰포트 및 컨테이너 단위를 활용하여 지정된 범위 내에서 일정한 비율로 폰트 크기를 보간(interpolate)하여 부드러운 전환을 만들어냅니다 [2, 4]. 이를 통해 스마트폰에서는 너무 작지 않고, 데스크톱에서는 너무 크지 않은 균형 잡힌 텍스트 크기를 유지할 수 있습니다 [3].
*   **핵심 구현 방법 (`clamp()` 함수):**
    가장 현대적이고 권장되는 구현 방식은 CSS의 `clamp(min, preferred, max)` 함수를 사용하는 것입니다 [1, 5, 6]. 이 함수는 최소 폰트 크기(floor), 뷰포트 기반의 선호 크기(scaling value), 그리고 최대 폰트 크기(ceiling)를 설정하여 브라우저가 공간에 맞춰 자동으로 크기를 계산하게 합니다 [1, 3]. 예를 들어 `font-size: clamp(1.5rem, 2vw + 1rem, 3rem);`와 같이 작성하면, 아무리 화면이 작거나 커져도 폰트가 지정된 최소/최대 범위를 벗어나지 않습니다 [1, 3, 7].
*   **접근성([[Accessibility]])을 위한 주의사항:**
    폰트 크기를 `1vw`나 `100vw`와 같은 순수 뷰포트/컨테이너 단위로만 설정하는 것은 사용자에게 매우 적대적인(hostile) 방식입니다 [8]. 브라우저 창을 줄이는 것과 돋보기(zoom) 기능을 사용하는 것은 사용자 의도가 다름에도 불구하고 CSS 뷰포트 단위에서는 동일하게 계산되어, 사용자가 브라우저 설정을 통해 화면을 확대하더라도 폰트 크기가 커지지 않게 됩니다 [9, 10]. 이는 "보조 기술 없이 텍스트를 200%까지 확대할 수 있어야 한다"는 웹 콘텐츠 접근성 지침(WCAG 1.4.4)을 직접적으로 위반합니다 [8].
*   **안전한 Fluid Typography 설계 (Best Practices):**
    사용자의 기본 폰트 설정과 브라우저 확대/축소 기능을 존중하기 위해, 뷰포트 단위와 사용자의 선호 단위(`rem`, `em`)를 `calc()` 함수로 결합해야 합니다(예: `calc(16px + 1vw)`) [11]. 또한 `clamp()`를 사용할 때 최소값과 최대값을 모두 `em` 또는 `rem` 단위로 지정하고, 최대 폰트 크기가 최소 폰트 크기의 2.5배를 초과하지 않도록 설정해야 WCAG SC 1.4.4 기준(200% 확대 보장)을 안전하게 통과할 수 있습니다 [12, 13].

## 🔗 Knowledge Connections
- **Related Topics:** [[Responsive Web Design]], [[CSS Media Queries]], [[Container Queries]], [[Web Content Accessibility Guidelines (WCAG)]]
- **Projects/Contexts:** [[모바일 퍼스트 및 다양한 디바이스 환경을 위한 반응형 레이아웃 구축]], [[디자인 시스템의 타이포그래피 토큰 확장 및 최적화]]
- **Contradictions/Notes:** 뷰포트 단위(`vw` 등)는 화면 크기에 반응하여 유동성을 주지만, 단독으로 사용할 경우 사용자의 브라우저 확대(Zoom) 및 기본 폰트 설정을 무시하게 되어 접근성(WCAG)을 심각하게 훼손한다는 점에 주의해야 합니다. 따라서 반드시 `clamp()` 및 `rem`/`em` 단위와 혼합하여 사용해야 합니다 [8, 13].

---
*Last updated: 2026-04-26*