Typography (타이포그래피)
Foundation의 타이포그래피 시스템은 일관된 텍스트 스타일을 제공하여 가독성과 계층 구조를 명확하게 표현합니다.
타이포그래피 철학
Foundation의 타이포그래피는 다음 원칙을 따릅니다:
- Readability First: 가독성을 최우선으로 고려
- Consistency: 일관된 폰트 크기 및 행간 사용
- Hierarchy: 명확한 시각적 계층 구조
- Flexibility: 프로젝트 요구사항에 맞게 커스터마이징 가능
Font Size (폰트 크기)
Foundation은 12px부터 32px까지 7단계 폰트 크기를 제공합니다.
실제 토큰 값 (core.css)
@theme {
/* Typography - Font Size */
--font-size-xs: 12px;
--font-size-sm: 14px;
--font-size-base: 16px;
--font-size-lg: 18px;
--font-size-xl: 20px;
--font-size-2xl: 24px;
--font-size-3xl: 32px;
}사용 가이드
| 토큰 | 크기 | 사용 사례 | Tailwind Class |
|---|---|---|---|
| xs | 12px | Caption, Helper Text | text-xs |
| sm | 14px | Small Text, Label | text-sm |
| base | 16px | Body Text (기본) | text-base |
| lg | 18px | Lead Paragraph | text-lg |
| xl | 20px | Heading 3 | text-xl |
| 2xl | 24px | Heading 2 | text-2xl |
| 3xl | 32px | Heading 1, Hero Title | text-3xl |
예제
<div>
<h1 className="text-3xl font-bold">Main Heading (32px)</h1>
<h2 className="text-2xl font-semibold">Sub Heading (24px)</h2>
<h3 className="text-xl font-semibold">Section Title (20px)</h3>
<p className="text-base">Body text paragraph (16px)</p>
<p className="text-sm text-gray-500">Secondary text (14px)</p>
<p className="text-xs text-gray-400">Caption text (12px)</p>
</div>Font Weight (폰트 가중치)
Foundation은 4단계 폰트 가중치를 제공합니다.
실제 토큰 값 (core.css)
@theme {
/* Typography - Font Weight */
--font-weight-normal: 400;
--font-weight-medium: 500;
--font-weight-semibold: 600;
--font-weight-bold: 700;
}사용 가이드
| 토큰 | 값 | 사용 사례 | Tailwind Class |
|---|---|---|---|
| normal | 400 | Body Text | font-normal |
| medium | 500 | 강조 텍스트 | font-medium |
| semibold | 600 | Heading 3 | font-semibold |
| bold | 700 | Heading 1, 2 | font-bold |
예제
<div>
<p className="font-normal">Normal text (400)</p>
<p className="font-medium">Medium text (500)</p>
<p className="font-semibold">Semibold text (600)</p>
<p className="font-bold">Bold text (700)</p>
</div>Line Height (행간)
Foundation은 3단계 행간을 제공합니다.
실제 토큰 값 (core.css)
@theme {
/* Typography - Line Height */
--line-height-tight: 1.25;
--line-height-normal: 1.5;
--line-height-relaxed: 1.75;
}사용 가이드
| 토큰 | 값 | 사용 사례 | Tailwind Class |
|---|---|---|---|
| tight | 1.25 | Heading, Title | leading-tight |
| normal | 1.5 | Body Text (기본) | leading-normal |
| relaxed | 1.75 | Long Form Content | leading-relaxed |
예제
<div>
<h1 className="text-3xl font-bold leading-tight">Tight Line Height (1.25)</h1>
<p className="text-base leading-normal">
Normal line height (1.5) for body text. This is the default line height and
provides good readability for paragraphs.
</p>
<p className="text-base leading-relaxed">
Relaxed line height (1.75) for long-form content. This provides more
breathing room between lines and is ideal for articles or documentation.
</p>
</div>Font Family (폰트 패밀리)
Foundation은 System Font Stack을 기본으로 사용합니다.
기본 폰트 스택
font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue",
Arial, sans-serif;커스터마이징 (한글 폰트 적용)
// tailwind.config.ts
export default {
presets: [foundationPreset],
theme: {
extend: {
fontFamily: {
sans: ["Pretendard", "system-ui", "sans-serif"],
mono: ["JetBrains Mono", "monospace"],
},
},
},
};Pretendard 폰트 로드
/* src/index.css */
@import url("https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css");타이포그래피 스케일
Heading Scale
| Heading | Font Size | Font Weight | Line Height | 사용 사례 |
|---|---|---|---|---|
| H1 | 32px (3xl) | Bold (700) | Tight (1.25) | Page Title |
| H2 | 24px (2xl) | Semibold (600) | Tight (1.25) | Section Title |
| H3 | 20px (xl) | Semibold (600) | Normal (1.5) | Subsection |
| H4 | 18px (lg) | Medium (500) | Normal (1.5) | Card Title |
| H5 | 16px (base) | Medium (500) | Normal (1.5) | List Item |
| H6 | 14px (sm) | Medium (500) | Normal (1.5) | Label |
Body Scale
| 용도 | Font Size | Font Weight | Line Height |
|---|---|---|---|
| Lead | 18px (lg) | Normal (400) | Relaxed (1.75) |
| Body | 16px (base) | Normal (400) | Normal (1.5) |
| Small | 14px (sm) | Normal (400) | Normal (1.5) |
| Caption | 12px (xs) | Normal (400) | Normal (1.5) |
사용 방법
CSS Variables로 사용
h1 {
font-size: var(--font-size-3xl);
font-weight: var(--font-weight-bold);
line-height: var(--line-height-tight);
}
p {
font-size: var(--font-size-base);
font-weight: var(--font-weight-normal);
line-height: var(--line-height-normal);
}Tailwind Utility Classes로 사용
<div>
<h1 className="text-3xl font-bold leading-tight">Title</h1>
<p className="text-base font-normal leading-normal">Paragraph</p>
</div>TypeScript/TSX에서 사용
export default function Article() {
return (
<article className="max-w-2xl mx-auto">
<h1 className="text-3xl font-bold leading-tight text-gray-900 mb-4">
Article Title
</h1>
<p className="text-lg font-normal leading-relaxed text-gray-600 mb-6">
Lead paragraph with larger font size and relaxed line height.
</p>
<p className="text-base font-normal leading-normal text-gray-700 mb-4">
Body paragraph with normal font size and line height. This is the
default text style for most content.
</p>
<p className="text-sm font-normal leading-normal text-gray-500">
Smaller secondary text for additional information.
</p>
</article>
);
}접근성 고려사항
최소 폰트 크기
- 모바일: 최소 14px (sm) 이상 사용
- 데스크톱: 최소 16px (base) 이상 사용
- 작은 텍스트: 12px (xs)는 Caption, Helper Text에만 사용
줄 길이 (Line Length)
- 최적: 50-75자 (한글 기준 25-35자)
- 최대: 90자 (한글 기준 45자)
<p className="text-base max-w-2xl">
Content with optimal line length for readability
</p>텍스트 대비
- 일반 텍스트: 최소 4.5:1 대비
- 큰 텍스트 (18px+): 최소 3:1 대비
실전 예제
Hero Section
export default function Hero() {
return (
<section className="py-20 text-center">
<h1 className="text-3xl font-bold leading-tight text-gray-900 mb-4">
Welcome to Vortex UI
</h1>
<p className="text-lg font-normal leading-relaxed text-gray-600 max-w-2xl mx-auto">
Build beautiful, accessible interfaces with our design system
</p>
</section>
);
}Card with Typography Hierarchy
export default function ProductCard() {
return (
<div className="p-6 bg-white border border-gray-200 rounded-lg">
<span className="text-xs font-medium text-gray-500 uppercase">
Category
</span>
<h3 className="text-xl font-semibold text-gray-900 mt-2">Product Name</h3>
<p className="text-base font-normal text-gray-700 mt-3 leading-relaxed">
Product description with optimal line height for readability
</p>
<p className="text-sm font-normal text-gray-500 mt-4">
Additional information in smaller text
</p>
</div>
);
}다음 단계
Last updated on