Colors (색상)
Foundation의 색상 시스템은 Neutral Gray Scale을 중심으로 구성되어 있으며, 프로젝트 요구사항에 맞게 Primary, Secondary, Accent 색상을 자유롭게 커스터마이징할 수 있습니다.
색상 철학
Foundation은 특정 브랜드에 종속되지 않는 중립적인 색상 시스템을 제공합니다:
- Neutral First: Gray Scale을 기본으로 제공
- Customizable: Primary/Secondary/Accent는 프로젝트별로 정의
- Accessibility: WCAG 2.1 AA 기준 색상 대비 보장
- Consistency: 모든 컴포넌트가 동일한 색상 토큰 사용
Neutral Colors (Gray Scale)
Foundation은 50부터 900까지 10단계 Gray Scale을 제공합니다.
실제 토큰 값 (core.css)
@theme {
--color-white: #ffffff;
--color-black: #000000;
--color-gray-50: #fafafa;
--color-gray-100: #f5f5f5;
--color-gray-200: #e5e5e5;
--color-gray-300: #d4d4d4;
--color-gray-400: #a3a3a3;
--color-gray-500: #737373;
--color-gray-600: #525252;
--color-gray-700: #404040;
--color-gray-800: #262626;
--color-gray-900: #171717;
}사용 사례
| Shade | Hex | 사용 사례 |
|---|---|---|
| white | #ffffff | 기본 배경색, 카드 배경 |
| gray-50 | #fafafa | Subtle 배경, Hover 상태 |
| gray-100 | #f5f5f5 | Input 배경, Disabled 배경 |
| gray-200 | #e5e5e5 | Border, Divider |
| gray-300 | #d4d4d4 | Input Border |
| gray-400 | #a3a3a3 | Placeholder Text |
| gray-500 | #737373 | Secondary Text |
| gray-600 | #525252 | Primary Text (light bg) |
| gray-700 | #404040 | Heading Text |
| gray-800 | #262626 | Strong Text |
| gray-900 | #171717 | High Contrast Text |
| black | #000000 | 강조 텍스트, 아이콘 |
Primary/Secondary/Accent Colors
Foundation은 Primary, Secondary, Accent 색상을 커스터마이징 가능하도록 설계되었습니다.
기본값 (커스터마이징 전)
Foundation은 기본 Primary/Secondary 색상을 제공하지 않습니다. 프로젝트에서 직접 정의해야 합니다.
커스터마이징 방법
// tailwind.config.ts
import type { Config } from "tailwindcss";
import { foundationPreset } from "@vortex/ui-foundation/preset";
export default {
presets: [foundationPreset],
theme: {
extend: {
colors: {
// Primary 색상 정의
primary: {
50: "#e3f2fd",
100: "#bbdefb",
200: "#90caf9",
300: "#64b5f6",
400: "#42a5f5",
500: "#2196f3", // DEFAULT
600: "#1e88e5",
700: "#1976d2",
800: "#1565c0",
900: "#0d47a1",
DEFAULT: "#2196f3",
foreground: "#ffffff",
},
// Secondary 색상 정의
secondary: {
DEFAULT: "#6c757d",
foreground: "#ffffff",
},
// Accent 색상 정의
accent: {
DEFAULT: "#ff9800",
foreground: "#ffffff",
},
},
},
},
} satisfies Config;Material Design 3.0 Color System 활용
구글의 Material Theme Builder 를 사용하여 일관된 색상 팔레트를 생성할 수 있습니다.
사용 방법
CSS Variables로 사용
.my-component {
background-color: var(--color-white);
color: var(--color-gray-900);
border-color: var(--color-gray-200);
}
.my-button {
background-color: var(--color-primary-500);
color: var(--color-primary-foreground);
}Tailwind Utility Classes로 사용
<div className="bg-white text-gray-900 border-gray-200">
<p className="text-gray-500">Secondary Text</p>
<button className="bg-primary text-primary-foreground">Primary Button</button>
</div>TypeScript/TSX에서 사용
import { Button } from "@vortex/ui-foundation";
export default function MyComponent() {
return (
<div className="p-6 bg-gray-50">
<h1 className="text-2xl font-bold text-gray-900">Title</h1>
<p className="text-gray-600">Description</p>
<Button variant="primary">Primary Action</Button>
<Button variant="secondary">Secondary Action</Button>
</div>
);
}접근성 고려사항
WCAG 2.1 AA 준수
Foundation의 Neutral Colors는 WCAG 2.1 AA 기준을 준수합니다:
- 텍스트 대비 (일반 텍스트): 최소 4.5:1
- 텍스트 대비 (큰 텍스트): 최소 3:1
- UI 요소 대비: 최소 3:1
권장 조합
| 배경 | 텍스트 | 대비율 | WCAG |
|---|---|---|---|
| white (#ffffff) | gray-900 (#171717) | 19.6:1 | ✅ AAA |
| white (#ffffff) | gray-700 (#404040) | 10.4:1 | ✅ AAA |
| white (#ffffff) | gray-600 (#525252) | 7.8:1 | ✅ AAA |
| white (#ffffff) | gray-500 (#737373) | 4.7:1 | ✅ AA |
| gray-50 (#fafafa) | gray-900 (#171717) | 18.8:1 | ✅ AAA |
| gray-100 (#f5f5f5) | gray-900 (#171717) | 17.1:1 | ✅ AAA |
색맹 사용자 고려
- 색상에만 의존하지 않기: 색상 외에 아이콘, 텍스트, 패턴으로 정보 전달
- 충분한 대비: Gray Scale 사용 시 최소 4.5:1 이상 대비 유지
- 테스트 도구: Stark , Accessibility Insights 사용
실전 예제
Card 컴포넌트
import { Card } from "@vortex/ui-foundation";
export default function ProductCard() {
return (
<Card className="bg-white border-gray-200">
<div className="p-6">
<h3 className="text-lg font-semibold text-gray-900">Product Title</h3>
<p className="text-sm text-gray-500 mt-2">
Product description goes here
</p>
<div className="mt-4 flex gap-2">
<button className="px-4 py-2 bg-primary text-primary-foreground rounded-md">
Buy Now
</button>
<button className="px-4 py-2 bg-gray-100 text-gray-700 rounded-md">
Learn More
</button>
</div>
</div>
</Card>
);
}Alert 컴포넌트 (Semantic Colors)
export default function AlertExample() {
return (
<>
{/* Success Alert */}
<div className="p-4 bg-green-50 border-green-200 border rounded-md">
<p className="text-green-800">Operation completed successfully</p>
</div>
{/* Error Alert */}
<div className="p-4 bg-red-50 border-red-200 border rounded-md">
<p className="text-red-800">An error occurred</p>
</div>
{/* Warning Alert */}
<div className="p-4 bg-yellow-50 border-yellow-200 border rounded-md">
<p className="text-yellow-800">Please review before proceeding</p>
</div>
</>
);
}다음 단계
Last updated on