@kood/claude-code 0.7.6 → 0.7.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +215 -39
- package/package.json +1 -1
- package/templates/.claude/skills/design/SKILL.md +199 -0
- package/templates/.claude/skills/design/references/accessibility.md +106 -0
- package/templates/.claude/skills/design/references/checklist.md +41 -0
- package/templates/.claude/skills/design/references/core-principles.md +66 -0
- package/templates/.claude/skills/design/references/global-uiux.md +216 -0
- package/templates/.claude/skills/design/references/korea-uiux.md +227 -0
- package/templates/.claude/skills/design/references/patterns.md +250 -0
- package/templates/.claude/skills/design/references/responsive.md +248 -0
- package/templates/.claude/skills/design/references/safe-area.md +202 -0
- package/templates/.claude/skills/design/references/systems.md +116 -0
- package/templates/.claude/skills/design/references/trends.md +75 -0
- package/templates/.claude/skills/global-uiux-design/AGENTS.md +0 -320
- package/templates/.claude/skills/global-uiux-design/SKILL.md +0 -1089
- package/templates/.claude/skills/global-uiux-design/references/accessibility.md +0 -401
- package/templates/.claude/skills/global-uiux-design/references/color-system.md +0 -275
- package/templates/.claude/skills/global-uiux-design/references/design-philosophy.md +0 -206
- package/templates/.claude/skills/global-uiux-design/references/design-systems.md +0 -446
- package/templates/.claude/skills/korea-uiux-design/AGENTS.md +0 -310
- package/templates/.claude/skills/korea-uiux-design/SKILL.md +0 -980
- package/templates/.claude/skills/korea-uiux-design/references/accessibility.md +0 -298
- package/templates/.claude/skills/korea-uiux-design/references/checklist.md +0 -107
- package/templates/.claude/skills/korea-uiux-design/references/color-system.md +0 -156
- package/templates/.claude/skills/korea-uiux-design/references/design-philosophy.md +0 -25
- package/templates/.claude/skills/korea-uiux-design/references/icon-guide.md +0 -180
- package/templates/.claude/skills/korea-uiux-design/references/micro-interactions.md +0 -259
- package/templates/.claude/skills/korea-uiux-design/references/responsive-patterns.md +0 -115
- package/templates/.claude/skills/korea-uiux-design/references/service-patterns.md +0 -206
- package/templates/.claude/skills/korea-uiux-design/references/state-patterns.md +0 -320
- package/templates/.claude/skills/korea-uiux-design/references/typography.md +0 -70
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
# 디자인 패턴 가이드
|
|
2
|
+
|
|
3
|
+
> 랜딩 페이지, 대시보드, 폼, 모바일 앱의 디자인 사양서
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. 랜딩 페이지
|
|
8
|
+
|
|
9
|
+
### 히어로 섹션
|
|
10
|
+
|
|
11
|
+
| 요소 | 사양 |
|
|
12
|
+
|------|------|
|
|
13
|
+
| **높이** | 100vh (전체 화면) 또는 최소 600px |
|
|
14
|
+
| **헤드라인** | 6-10 단어, 48-72px, Bold |
|
|
15
|
+
| **부제목** | 15-25 단어, 18-24px, Regular |
|
|
16
|
+
| **CTA 버튼** | 높이 48-56px, 패딩 24-32px |
|
|
17
|
+
| **여백** | 좌우 16px (모바일), 32px (데스크톱) |
|
|
18
|
+
|
|
19
|
+
**CTA 버튼 배치:**
|
|
20
|
+
- Primary: 브랜드 컬러, 채워진 형태
|
|
21
|
+
- Secondary: 아웃라인 또는 Ghost
|
|
22
|
+
|
|
23
|
+
### 소셜 프루프
|
|
24
|
+
|
|
25
|
+
| 요소 | 사양 |
|
|
26
|
+
|------|------|
|
|
27
|
+
| **로고 높이** | 24-40px |
|
|
28
|
+
| **로고 개수** | 4-6개 권장 |
|
|
29
|
+
| **스타일** | Grayscale, opacity 60-80% |
|
|
30
|
+
| **간격** | 로고 간 48-64px |
|
|
31
|
+
| **배경** | 약간 어두운 톤 (#F5F5F5) |
|
|
32
|
+
|
|
33
|
+
### 기능 섹션
|
|
34
|
+
|
|
35
|
+
| 레이아웃 | 모바일 | 태블릿 | 데스크톱 |
|
|
36
|
+
|---------|--------|--------|----------|
|
|
37
|
+
| **열 수** | 1 | 2 | 3-4 |
|
|
38
|
+
| **아이콘 크기** | 40px | 48px | 56px |
|
|
39
|
+
| **카드 패딩** | 16px | 24px | 32px |
|
|
40
|
+
| **카드 간격** | 16px | 24px | 32px |
|
|
41
|
+
|
|
42
|
+
### 가격 테이블
|
|
43
|
+
|
|
44
|
+
| 요소 | 사양 |
|
|
45
|
+
|------|------|
|
|
46
|
+
| **플랜 개수** | 3개 권장 (Basic / Pro / Enterprise) |
|
|
47
|
+
| **강조 플랜** | 중앙 배치, 스케일 1.05, 그림자 추가 |
|
|
48
|
+
| **가격 폰트** | 32-48px, Bold |
|
|
49
|
+
| **기능 리스트** | 체크 아이콘 + 텍스트, 14-16px |
|
|
50
|
+
| **CTA 버튼** | 전체 너비, 높이 48px |
|
|
51
|
+
|
|
52
|
+
### CTA 섹션 (Footer CTA)
|
|
53
|
+
|
|
54
|
+
| 요소 | 사양 |
|
|
55
|
+
|------|------|
|
|
56
|
+
| **배경** | 브랜드 컬러 또는 그라데이션 |
|
|
57
|
+
| **패딩** | 상하 80-120px |
|
|
58
|
+
| **헤드라인** | 32-40px, 중앙 정렬 |
|
|
59
|
+
| **버튼** | 대비 높은 컬러 (예: 흰색) |
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## 2. 대시보드
|
|
64
|
+
|
|
65
|
+
### 레이아웃 구조
|
|
66
|
+
|
|
67
|
+
| 영역 | 사양 |
|
|
68
|
+
|------|------|
|
|
69
|
+
| **사이드바** | 너비 240-280px, 축소 시 64-80px |
|
|
70
|
+
| **헤더** | 높이 56-64px |
|
|
71
|
+
| **메인 영역** | 패딩 24-32px |
|
|
72
|
+
| **카드 간격** | 16-24px |
|
|
73
|
+
|
|
74
|
+
### KPI 카드
|
|
75
|
+
|
|
76
|
+
| 요소 | 사양 |
|
|
77
|
+
|------|------|
|
|
78
|
+
| **최소 너비** | 240px |
|
|
79
|
+
| **높이** | 120-160px |
|
|
80
|
+
| **아이콘** | 24px, 배경 40x40px 원형 |
|
|
81
|
+
| **숫자** | 28-32px, Bold |
|
|
82
|
+
| **라벨** | 12-14px, Gray |
|
|
83
|
+
| **변화율** | 12px, 상승=초록, 하락=빨강 |
|
|
84
|
+
|
|
85
|
+
### 데이터 테이블
|
|
86
|
+
|
|
87
|
+
| 요소 | 사양 |
|
|
88
|
+
|------|------|
|
|
89
|
+
| **행 높이** | 48-56px |
|
|
90
|
+
| **헤더 배경** | #F9FAFB 또는 투명 |
|
|
91
|
+
| **구분선** | 1px, #E5E7EB |
|
|
92
|
+
| **호버 배경** | #F3F4F6 |
|
|
93
|
+
| **패딩** | 좌우 16px |
|
|
94
|
+
| **정렬** | 텍스트=좌측, 숫자=우측 |
|
|
95
|
+
|
|
96
|
+
### 사이드바 네비게이션
|
|
97
|
+
|
|
98
|
+
| 요소 | 사양 |
|
|
99
|
+
|------|------|
|
|
100
|
+
| **메뉴 아이템 높이** | 40-48px |
|
|
101
|
+
| **아이콘** | 20px |
|
|
102
|
+
| **아이콘-텍스트 간격** | 12px |
|
|
103
|
+
| **활성 상태** | 배경 강조 + 좌측 인디케이터 3px |
|
|
104
|
+
| **그룹 간격** | 24px |
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## 3. 폼 디자인
|
|
109
|
+
|
|
110
|
+
### 입력 필드
|
|
111
|
+
|
|
112
|
+
| 상태 | 스타일 |
|
|
113
|
+
|------|--------|
|
|
114
|
+
| **기본** | 테두리 #D1D5DB, 배경 #FFFFFF |
|
|
115
|
+
| **포커스** | 테두리 브랜드 컬러, 링 2px |
|
|
116
|
+
| **오류** | 테두리 #EF4444, 배경 #FEF2F2 |
|
|
117
|
+
| **비활성** | 배경 #F3F4F6, 텍스트 #9CA3AF |
|
|
118
|
+
|
|
119
|
+
### 필드 사이즈
|
|
120
|
+
|
|
121
|
+
| 사이즈 | 높이 | 패딩 | 폰트 |
|
|
122
|
+
|--------|------|------|------|
|
|
123
|
+
| **Small** | 32px | 8px 12px | 14px |
|
|
124
|
+
| **Medium** | 40px | 10px 14px | 14px |
|
|
125
|
+
| **Large** | 48px | 12px 16px | 16px |
|
|
126
|
+
|
|
127
|
+
### 레이블과 에러
|
|
128
|
+
|
|
129
|
+
| 요소 | 사양 |
|
|
130
|
+
|------|------|
|
|
131
|
+
| **레이블** | 14px, Medium, 필드 위 8px |
|
|
132
|
+
| **필수 표시** | 빨간 * 또는 "(필수)" |
|
|
133
|
+
| **헬퍼 텍스트** | 12px, Gray, 필드 아래 4px |
|
|
134
|
+
| **에러 메시지** | 12px, Red, 필드 아래 4px |
|
|
135
|
+
|
|
136
|
+
### 버튼 사이즈
|
|
137
|
+
|
|
138
|
+
| 사이즈 | 높이 | 패딩 | 폰트 |
|
|
139
|
+
|--------|------|------|------|
|
|
140
|
+
| **Small** | 32px | 0 12px | 14px |
|
|
141
|
+
| **Medium** | 40px | 0 16px | 14px |
|
|
142
|
+
| **Large** | 48px | 0 24px | 16px |
|
|
143
|
+
|
|
144
|
+
### 멀티스텝 폼
|
|
145
|
+
|
|
146
|
+
| 요소 | 사양 |
|
|
147
|
+
|------|------|
|
|
148
|
+
| **진행률 표시** | 스텝 번호 또는 프로그레스 바 |
|
|
149
|
+
| **스텝 간격** | 스텝당 3-5개 필드 권장 |
|
|
150
|
+
| **네비게이션** | 이전/다음 버튼, 하단 고정 |
|
|
151
|
+
| **요약 화면** | 제출 전 전체 내용 확인 |
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## 4. 모바일 앱
|
|
156
|
+
|
|
157
|
+
### 네비게이션
|
|
158
|
+
|
|
159
|
+
| 유형 | 사양 |
|
|
160
|
+
|------|------|
|
|
161
|
+
| **탭 바** | 높이 56-64px, 아이템 3-5개 |
|
|
162
|
+
| **탭 아이콘** | 24px, 라벨 10-12px |
|
|
163
|
+
| **상단 앱바** | 높이 56px |
|
|
164
|
+
| **드로어** | 너비 280-320px |
|
|
165
|
+
|
|
166
|
+
### 터치 타겟
|
|
167
|
+
|
|
168
|
+
| 요소 | 최소 사이즈 |
|
|
169
|
+
|------|------------|
|
|
170
|
+
| **버튼** | 44x44px (iOS), 48x48dp (Android) |
|
|
171
|
+
| **리스트 아이템** | 높이 48px |
|
|
172
|
+
| **아이콘 버튼** | 44x44px |
|
|
173
|
+
| **탭 간격** | 8px 이상 |
|
|
174
|
+
|
|
175
|
+
### 리스트 아이템
|
|
176
|
+
|
|
177
|
+
| 요소 | 사양 |
|
|
178
|
+
|------|------|
|
|
179
|
+
| **높이** | 56-72px |
|
|
180
|
+
| **아바타** | 40px 원형 |
|
|
181
|
+
| **아이콘** | 24px |
|
|
182
|
+
| **패딩** | 좌우 16px |
|
|
183
|
+
| **구분선** | 1px, 아바타 뒤에서 시작 |
|
|
184
|
+
|
|
185
|
+
### 카드
|
|
186
|
+
|
|
187
|
+
| 요소 | 사양 |
|
|
188
|
+
|------|------|
|
|
189
|
+
| **모서리 반경** | 12-16px |
|
|
190
|
+
| **그림자** | 0 2px 8px rgba(0,0,0,0.1) |
|
|
191
|
+
| **패딩** | 16px |
|
|
192
|
+
| **이미지 비율** | 16:9 또는 4:3 |
|
|
193
|
+
|
|
194
|
+
### 바텀 시트
|
|
195
|
+
|
|
196
|
+
| 요소 | 사양 |
|
|
197
|
+
|------|------|
|
|
198
|
+
| **핸들** | 너비 40px, 높이 4px, 중앙 |
|
|
199
|
+
| **모서리 반경** | 상단 16-24px |
|
|
200
|
+
| **최대 높이** | 90% 화면 |
|
|
201
|
+
| **딤 배경** | rgba(0,0,0,0.5) |
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## 5. 공통 컴포넌트
|
|
206
|
+
|
|
207
|
+
### 모달/다이얼로그
|
|
208
|
+
|
|
209
|
+
| 요소 | 사양 |
|
|
210
|
+
|------|------|
|
|
211
|
+
| **최대 너비** | 480px (Small), 640px (Medium), 800px (Large) |
|
|
212
|
+
| **모서리 반경** | 12-16px |
|
|
213
|
+
| **패딩** | 24px |
|
|
214
|
+
| **딤 배경** | rgba(0,0,0,0.5) |
|
|
215
|
+
| **닫기 버튼** | 우상단, 24x24px |
|
|
216
|
+
|
|
217
|
+
### 토스트/알림
|
|
218
|
+
|
|
219
|
+
| 요소 | 사양 |
|
|
220
|
+
|------|------|
|
|
221
|
+
| **위치** | 하단 중앙 또는 상단 우측 |
|
|
222
|
+
| **최대 너비** | 400px |
|
|
223
|
+
| **높이** | 48-56px |
|
|
224
|
+
| **지속 시간** | 3-5초 |
|
|
225
|
+
| **아이콘** | 20px, 좌측 |
|
|
226
|
+
|
|
227
|
+
### 로딩 상태
|
|
228
|
+
|
|
229
|
+
| 유형 | 사양 |
|
|
230
|
+
|------|------|
|
|
231
|
+
| **스피너** | 24-40px, 브랜드 컬러 |
|
|
232
|
+
| **스켈레톤** | 배경 #E5E7EB, 애니메이션 펄스 |
|
|
233
|
+
| **프로그레스 바** | 높이 4px, 브랜드 컬러 |
|
|
234
|
+
|
|
235
|
+
### 빈 상태 (Empty State)
|
|
236
|
+
|
|
237
|
+
| 요소 | 사양 |
|
|
238
|
+
|------|------|
|
|
239
|
+
| **일러스트** | 120-200px |
|
|
240
|
+
| **헤드라인** | 20-24px, Bold |
|
|
241
|
+
| **설명** | 14-16px, Gray |
|
|
242
|
+
| **CTA** | 선택적, 40px 높이 |
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## 참고
|
|
247
|
+
|
|
248
|
+
- [Material Design Components](https://m3.material.io/components)
|
|
249
|
+
- [Apple Human Interface Guidelines](https://developer.apple.com/design/human-interface-guidelines/)
|
|
250
|
+
- [Tailwind UI Patterns](https://tailwindui.com/)
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
# 반응형 디자인 가이드 (2025-2026)
|
|
2
|
+
|
|
3
|
+
> 브레이크포인트, Container Queries, Fluid Typography 디자인 사양서
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. 브레이크포인트
|
|
8
|
+
|
|
9
|
+
### 표준 브레이크포인트
|
|
10
|
+
|
|
11
|
+
| 이름 | 너비 | 대상 기기 |
|
|
12
|
+
|------|------|----------|
|
|
13
|
+
| **xs** | 0-359px | 소형 폰 |
|
|
14
|
+
| **sm** | 360-639px | 일반 폰 |
|
|
15
|
+
| **md** | 640-767px | 대형 폰/소형 태블릿 |
|
|
16
|
+
| **lg** | 768-1023px | 태블릿 |
|
|
17
|
+
| **xl** | 1024-1279px | 소형 데스크톱/랩탑 |
|
|
18
|
+
| **2xl** | 1280-1535px | 데스크톱 |
|
|
19
|
+
| **3xl** | 1536px+ | 대형 데스크톱 |
|
|
20
|
+
|
|
21
|
+
### 디자인 권장 브레이크포인트
|
|
22
|
+
|
|
23
|
+
| 접근법 | 브레이크포인트 | 용도 |
|
|
24
|
+
|--------|--------------|------|
|
|
25
|
+
| **Mobile-First** | 360 → 768 → 1024 → 1440 | 일반적 |
|
|
26
|
+
| **Desktop-First** | 1440 → 1024 → 768 → 360 | 레거시 |
|
|
27
|
+
| **Content-First** | 콘텐츠 깨지는 지점 | 최적 |
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 2. Container Queries
|
|
32
|
+
|
|
33
|
+
### 컨테이너 사이즈
|
|
34
|
+
|
|
35
|
+
| 이름 | 최소 너비 | 용도 |
|
|
36
|
+
|------|----------|------|
|
|
37
|
+
| **@xs** | 160px | 작은 위젯 |
|
|
38
|
+
| **@sm** | 320px | 카드 내부 |
|
|
39
|
+
| **@md** | 448px | 중간 컨테이너 |
|
|
40
|
+
| **@lg** | 512px | 넓은 컨테이너 |
|
|
41
|
+
| **@xl** | 576px | 전체 섹션 |
|
|
42
|
+
| **@2xl** | 672px | 메인 콘텐츠 |
|
|
43
|
+
|
|
44
|
+
### Container Query 단위
|
|
45
|
+
|
|
46
|
+
| 단위 | 설명 | 사용 예시 |
|
|
47
|
+
|------|------|----------|
|
|
48
|
+
| **cqw** | 컨테이너 너비 1% | 폰트 크기 유동화 |
|
|
49
|
+
| **cqh** | 컨테이너 높이 1% | 높이 기반 레이아웃 |
|
|
50
|
+
| **cqi** | 인라인 축 1% | 반응형 패딩 |
|
|
51
|
+
| **cqb** | 블록 축 1% | 반응형 마진 |
|
|
52
|
+
| **cqmin** | min(cqi, cqb) | 최소값 기반 |
|
|
53
|
+
| **cqmax** | max(cqi, cqb) | 최대값 기반 |
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## 3. Fluid Typography
|
|
58
|
+
|
|
59
|
+
### 폰트 크기 스케일
|
|
60
|
+
|
|
61
|
+
| 역할 | 모바일 | 데스크톱 | Fluid 범위 |
|
|
62
|
+
|------|--------|----------|-----------|
|
|
63
|
+
| **Display** | 36px | 72px | 36-72px |
|
|
64
|
+
| **H1** | 30px | 48px | 30-48px |
|
|
65
|
+
| **H2** | 24px | 36px | 24-36px |
|
|
66
|
+
| **H3** | 20px | 24px | 20-24px |
|
|
67
|
+
| **Body** | 16px | 18px | 16-18px |
|
|
68
|
+
| **Small** | 14px | 14px | 고정 |
|
|
69
|
+
| **Caption** | 12px | 12px | 고정 |
|
|
70
|
+
|
|
71
|
+
### Fluid 계산 공식
|
|
72
|
+
|
|
73
|
+
| 뷰포트 범위 | 공식 |
|
|
74
|
+
|------------|------|
|
|
75
|
+
| **360-1440px** | `clamp(최소, 계산값, 최대)` |
|
|
76
|
+
| **선호값 계산** | `최소 + (최대-최소) × ((100vw - 360px) / (1440-360))` |
|
|
77
|
+
|
|
78
|
+
### Line Height 권장값
|
|
79
|
+
|
|
80
|
+
| 폰트 크기 | Line Height |
|
|
81
|
+
|----------|-------------|
|
|
82
|
+
| **12-14px** | 1.5-1.6 |
|
|
83
|
+
| **16-18px** | 1.5-1.7 |
|
|
84
|
+
| **20-24px** | 1.4-1.5 |
|
|
85
|
+
| **30px+** | 1.2-1.3 |
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## 4. 레이아웃 패턴
|
|
90
|
+
|
|
91
|
+
### 그리드 시스템
|
|
92
|
+
|
|
93
|
+
| 브레이크포인트 | 열 수 | 거터 | 마진 |
|
|
94
|
+
|---------------|------|------|------|
|
|
95
|
+
| **Mobile** | 4 | 16px | 16px |
|
|
96
|
+
| **Tablet** | 8 | 24px | 32px |
|
|
97
|
+
| **Desktop** | 12 | 24px | auto (max 1200px) |
|
|
98
|
+
|
|
99
|
+
### 컴포넌트별 열 점유
|
|
100
|
+
|
|
101
|
+
| 컴포넌트 | 모바일 | 태블릿 | 데스크톱 |
|
|
102
|
+
|---------|--------|--------|----------|
|
|
103
|
+
| **카드** | 4열 (100%) | 4열 (50%) | 3-4열 (25-33%) |
|
|
104
|
+
| **사이드바** | 숨김 | 2열 | 3열 (고정) |
|
|
105
|
+
| **콘텐츠** | 4열 | 6열 | 9열 |
|
|
106
|
+
|
|
107
|
+
### 스택 vs 나란히
|
|
108
|
+
|
|
109
|
+
| 상황 | 모바일 | 태블릿+ |
|
|
110
|
+
|------|--------|--------|
|
|
111
|
+
| **이미지+텍스트** | 세로 스택 | 나란히 (50:50) |
|
|
112
|
+
| **폼 필드** | 전체 너비 | 2열 또는 3열 |
|
|
113
|
+
| **카드 그리드** | 1열 | 2-4열 |
|
|
114
|
+
| **네비게이션** | 햄버거 메뉴 | 가로 메뉴 |
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## 5. 반응형 스페이싱
|
|
119
|
+
|
|
120
|
+
### 기본 스페이싱 스케일
|
|
121
|
+
|
|
122
|
+
| 토큰 | 모바일 | 태블릿 | 데스크톱 |
|
|
123
|
+
|------|--------|--------|----------|
|
|
124
|
+
| **xs** | 4px | 4px | 4px |
|
|
125
|
+
| **sm** | 8px | 8px | 8px |
|
|
126
|
+
| **md** | 16px | 20px | 24px |
|
|
127
|
+
| **lg** | 24px | 32px | 40px |
|
|
128
|
+
| **xl** | 32px | 48px | 64px |
|
|
129
|
+
| **2xl** | 48px | 64px | 96px |
|
|
130
|
+
|
|
131
|
+
### 섹션 간격
|
|
132
|
+
|
|
133
|
+
| 섹션 유형 | 모바일 | 데스크톱 |
|
|
134
|
+
|----------|--------|----------|
|
|
135
|
+
| **히어로 → 섹션** | 48px | 80px |
|
|
136
|
+
| **섹션 간** | 48px | 80-120px |
|
|
137
|
+
| **Footer 전** | 64px | 120px |
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## 6. 반응형 이미지
|
|
142
|
+
|
|
143
|
+
### 이미지 사이즈 전략
|
|
144
|
+
|
|
145
|
+
| 브레이크포인트 | 권장 너비 | 포맷 |
|
|
146
|
+
|---------------|----------|------|
|
|
147
|
+
| **Mobile** | 640w, 750w | WebP/AVIF |
|
|
148
|
+
| **Tablet** | 1080w | WebP/AVIF |
|
|
149
|
+
| **Desktop** | 1920w, 2560w | WebP/AVIF |
|
|
150
|
+
|
|
151
|
+
### Art Direction
|
|
152
|
+
|
|
153
|
+
| 화면 | 비율 | 포커스 |
|
|
154
|
+
|------|------|--------|
|
|
155
|
+
| **모바일** | 1:1 또는 4:5 | 중심 크롭 |
|
|
156
|
+
| **태블릿** | 4:3 | 중간 크롭 |
|
|
157
|
+
| **데스크톱** | 16:9 또는 21:9 | 전체 이미지 |
|
|
158
|
+
|
|
159
|
+
### 히어로 이미지 사이즈
|
|
160
|
+
|
|
161
|
+
| 기기 | 너비 | 높이 |
|
|
162
|
+
|------|------|------|
|
|
163
|
+
| **Mobile** | 750px | 1334px (100vh) |
|
|
164
|
+
| **Tablet** | 1536px | 1024px |
|
|
165
|
+
| **Desktop** | 1920px | 1080px |
|
|
166
|
+
| **Retina** | 2x 해상도 | 2x 해상도 |
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## 7. 터치 vs 마우스
|
|
171
|
+
|
|
172
|
+
### 인터랙션 차이
|
|
173
|
+
|
|
174
|
+
| 요소 | 터치 (모바일) | 마우스 (데스크톱) |
|
|
175
|
+
|------|-------------|------------------|
|
|
176
|
+
| **터치 타겟** | 44-48px 최소 | 24px 가능 |
|
|
177
|
+
| **호버 상태** | 없음 | 필수 |
|
|
178
|
+
| **드래그** | 스와이프 제스처 | 드래그 앤 드롭 |
|
|
179
|
+
| **툴팁** | 탭 앤 홀드 | 호버 |
|
|
180
|
+
|
|
181
|
+
### 네비게이션 변환
|
|
182
|
+
|
|
183
|
+
| 데스크톱 | 모바일 변환 |
|
|
184
|
+
|---------|------------|
|
|
185
|
+
| **가로 메뉴** | 햄버거 메뉴 |
|
|
186
|
+
| **드롭다운** | 전체 화면 드로어 |
|
|
187
|
+
| **사이드바** | 바텀 시트 또는 숨김 |
|
|
188
|
+
| **호버 메뉴** | 탭 메뉴 |
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## 8. 2025-2026 트렌드
|
|
193
|
+
|
|
194
|
+
### 새로운 디바이스 대응
|
|
195
|
+
|
|
196
|
+
| 디바이스 | 고려사항 |
|
|
197
|
+
|---------|---------|
|
|
198
|
+
| **Foldable** | 힌지 영역 피하기, 연속성 유지 |
|
|
199
|
+
| **Ultra-wide** | 최대 너비 제한, 다중 열 |
|
|
200
|
+
| **AR/VR** | 3D 공간 UI, 시선 기반 인터랙션 |
|
|
201
|
+
|
|
202
|
+
### 새로운 CSS 기능
|
|
203
|
+
|
|
204
|
+
| 기능 | 용도 |
|
|
205
|
+
|------|------|
|
|
206
|
+
| **Container Queries** | 컴포넌트 기반 반응형 |
|
|
207
|
+
| **:has()** | 부모 선택자 |
|
|
208
|
+
| **Subgrid** | 중첩 그리드 정렬 |
|
|
209
|
+
| **CSS Nesting** | 선택자 중첩 |
|
|
210
|
+
| **@layer** | 캐스케이드 레이어 |
|
|
211
|
+
|
|
212
|
+
### Intrinsic Design 원칙
|
|
213
|
+
|
|
214
|
+
| 원칙 | 설명 |
|
|
215
|
+
|------|------|
|
|
216
|
+
| **콘텐츠 기반** | 브레이크포인트가 아닌 콘텐츠에 따라 |
|
|
217
|
+
| **유동적 스케일** | 단계별이 아닌 연속적 변화 |
|
|
218
|
+
| **컴포넌트 독립** | 컨테이너 기반 자체 반응형 |
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## 체크리스트
|
|
223
|
+
|
|
224
|
+
### 설계 단계
|
|
225
|
+
- [ ] Mobile-First 접근
|
|
226
|
+
- [ ] 핵심 브레이크포인트 정의 (360, 768, 1024, 1440)
|
|
227
|
+
- [ ] Fluid Typography 적용
|
|
228
|
+
- [ ] Container Queries 고려
|
|
229
|
+
|
|
230
|
+
### 구현 단계
|
|
231
|
+
- [ ] 터치 타겟 44px 이상
|
|
232
|
+
- [ ] 이미지 srcset/sizes 설정
|
|
233
|
+
- [ ] 호버 상태 → 모바일 대체
|
|
234
|
+
- [ ] 가로/세로 모드 테스트
|
|
235
|
+
|
|
236
|
+
### 테스트 단계
|
|
237
|
+
- [ ] 실제 기기 테스트
|
|
238
|
+
- [ ] 느린 네트워크 테스트
|
|
239
|
+
- [ ] 다크 모드 테스트
|
|
240
|
+
- [ ] 접근성 테스트
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## 참고
|
|
245
|
+
|
|
246
|
+
- [Responsive Web Design Fundamentals](https://web.dev/responsive-web-design-basics/)
|
|
247
|
+
- [Container Queries Spec](https://www.w3.org/TR/css-contain-3/)
|
|
248
|
+
- [Utopia Fluid Type Calculator](https://utopia.fyi/)
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
# Safe Area 디자인 가이드
|
|
2
|
+
|
|
3
|
+
> iOS, Android, Foldable 디바이스의 Safe Area 사양서
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. iOS Safe Area
|
|
8
|
+
|
|
9
|
+
### 기본 Insets
|
|
10
|
+
|
|
11
|
+
| 요소 | 사이즈 | 비고 |
|
|
12
|
+
|------|--------|------|
|
|
13
|
+
| **상단 (노치)** | 47-59pt | 기기별 상이 |
|
|
14
|
+
| **하단 (Home Indicator)** | 34pt | 홈 버튼 없는 기기 |
|
|
15
|
+
| **좌측 (가로)** | 44pt | 노치 회피 |
|
|
16
|
+
| **우측 (가로)** | 44pt | 노치 회피 |
|
|
17
|
+
|
|
18
|
+
### Dynamic Island
|
|
19
|
+
|
|
20
|
+
| 요소 | 사이즈 |
|
|
21
|
+
|------|--------|
|
|
22
|
+
| **높이** | 36px |
|
|
23
|
+
| **너비 (Compact)** | 126px |
|
|
24
|
+
| **너비 (Expanded)** | 최대 371px |
|
|
25
|
+
| **아이콘** | 24px |
|
|
26
|
+
| **텍스트** | 15pt, line-height 22pt |
|
|
27
|
+
|
|
28
|
+
**프레젠테이션 모드:**
|
|
29
|
+
- **Compact**: 기본 축소 (진행 중인 활동)
|
|
30
|
+
- **Minimal**: 최소화 (배경 활동)
|
|
31
|
+
- **Expanded**: 확장 (상세 정보)
|
|
32
|
+
|
|
33
|
+
### 디바이스별 Safe Area
|
|
34
|
+
|
|
35
|
+
| 디바이스 | 상단 | 하단 |
|
|
36
|
+
|---------|------|------|
|
|
37
|
+
| **iPhone 15 Pro** | 59pt | 34pt |
|
|
38
|
+
| **iPhone 15** | 59pt | 34pt |
|
|
39
|
+
| **iPhone SE** | 20pt | 0pt |
|
|
40
|
+
| **iPad Pro** | 24pt | 20pt |
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## 2. Android Safe Area
|
|
45
|
+
|
|
46
|
+
### Display Cutout 유형
|
|
47
|
+
|
|
48
|
+
| 유형 | 설명 |
|
|
49
|
+
|------|------|
|
|
50
|
+
| **Notch** | 상단 중앙 노치 |
|
|
51
|
+
| **Punch-hole** | 카메라 구멍 (좌상단/중앙) |
|
|
52
|
+
| **Waterfall** | 양측면 곡면 |
|
|
53
|
+
|
|
54
|
+
### System Bars 높이
|
|
55
|
+
|
|
56
|
+
| 요소 | 사이즈 | 비고 |
|
|
57
|
+
|------|--------|------|
|
|
58
|
+
| **Status Bar** | 24-48dp | 기기별 상이 |
|
|
59
|
+
| **Navigation Bar** | 48dp | 3버튼 네비게이션 |
|
|
60
|
+
| **Gesture Bar** | 24dp | 제스처 네비게이션 |
|
|
61
|
+
|
|
62
|
+
### Edge-to-Edge (Android 15+)
|
|
63
|
+
|
|
64
|
+
| 항목 | 사양 |
|
|
65
|
+
|------|------|
|
|
66
|
+
| **기본 동작** | SDK 35+ 앱은 강제 Edge-to-Edge |
|
|
67
|
+
| **시스템 바** | 반투명, 콘텐츠 뒤로 렌더링 |
|
|
68
|
+
| **필수 처리** | WindowInsets로 패딩 적용 |
|
|
69
|
+
|
|
70
|
+
### 제스처 영역
|
|
71
|
+
|
|
72
|
+
| 영역 | 사이즈 | 용도 |
|
|
73
|
+
|------|--------|------|
|
|
74
|
+
| **좌측 엣지** | 20dp | 뒤로가기 제스처 |
|
|
75
|
+
| **우측 엣지** | 20dp | 뒤로가기 제스처 |
|
|
76
|
+
| **하단** | 24dp | 홈 제스처 |
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## 3. Foldable 디바이스
|
|
81
|
+
|
|
82
|
+
### 힌지 영역
|
|
83
|
+
|
|
84
|
+
| 디바이스 | 힌지 너비 | 힌지 높이 |
|
|
85
|
+
|---------|----------|----------|
|
|
86
|
+
| **Galaxy Z Fold** | 0px (접힘) | 전체 높이 |
|
|
87
|
+
| **Pixel Fold** | 약 12dp | 전체 높이 |
|
|
88
|
+
|
|
89
|
+
### Flex Mode (반접힘)
|
|
90
|
+
|
|
91
|
+
| 영역 | 용도 |
|
|
92
|
+
|------|------|
|
|
93
|
+
| **상단 (경사)** | 비주얼 콘텐츠 (영상, 이미지) |
|
|
94
|
+
| **하단 (평면)** | 컨트롤 (버튼, 슬라이더) |
|
|
95
|
+
| **힌지 근처** | 인터랙티브 요소 배치 금지 |
|
|
96
|
+
|
|
97
|
+
### 화면 상태
|
|
98
|
+
|
|
99
|
+
| 상태 | 설명 |
|
|
100
|
+
|------|------|
|
|
101
|
+
| **FLAT** | 완전히 펼침 |
|
|
102
|
+
| **HALF_OPENED** | 반접힘 (Flex Mode) |
|
|
103
|
+
| **Tabletop** | 가로 반접힘 (힌지 가로) |
|
|
104
|
+
| **Book** | 세로 반접힘 (힌지 세로) |
|
|
105
|
+
|
|
106
|
+
### 앱 연속성 요구사항
|
|
107
|
+
|
|
108
|
+
| 항목 | 요구사항 |
|
|
109
|
+
|------|----------|
|
|
110
|
+
| **화면 전환** | 커버 ↔ 메인 중단 없이 |
|
|
111
|
+
| **스크롤 위치** | 전환 시 유지 |
|
|
112
|
+
| **키보드 상태** | 전환 시 유지 |
|
|
113
|
+
| **전체 화면** | 레터박스 금지 |
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## 4. 크로스 플랫폼
|
|
118
|
+
|
|
119
|
+
### React Native
|
|
120
|
+
|
|
121
|
+
| 요소 | 사양 |
|
|
122
|
+
|------|------|
|
|
123
|
+
| **라이브러리** | react-native-safe-area-context |
|
|
124
|
+
| **Hook** | useSafeAreaInsets() |
|
|
125
|
+
| **컴포넌트** | SafeAreaView, SafeAreaProvider |
|
|
126
|
+
|
|
127
|
+
### Web/PWA
|
|
128
|
+
|
|
129
|
+
| CSS 변수 | 설명 |
|
|
130
|
+
|---------|------|
|
|
131
|
+
| **safe-area-inset-top** | 상단 안전 영역 |
|
|
132
|
+
| **safe-area-inset-right** | 우측 안전 영역 |
|
|
133
|
+
| **safe-area-inset-bottom** | 하단 안전 영역 |
|
|
134
|
+
| **safe-area-inset-left** | 좌측 안전 영역 |
|
|
135
|
+
|
|
136
|
+
**Viewport 설정:** `viewport-fit=cover` 필수
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## 5. 디자인 가이드라인
|
|
141
|
+
|
|
142
|
+
### 콘텐츠 배치
|
|
143
|
+
|
|
144
|
+
| 영역 | 배치 가능 | 주의사항 |
|
|
145
|
+
|------|----------|---------|
|
|
146
|
+
| **Safe Area 내부** | 모든 인터랙티브 요소 | - |
|
|
147
|
+
| **Safe Area 외부** | 배경색, 장식 이미지 | 터치 불가 |
|
|
148
|
+
| **노치 영역** | 상태 바 정보만 | 커스텀 UI 금지 |
|
|
149
|
+
| **홈 인디케이터** | 비움 | 스와이프 영역 |
|
|
150
|
+
|
|
151
|
+
### 터치 타겟
|
|
152
|
+
|
|
153
|
+
| 항목 | 사양 |
|
|
154
|
+
|------|------|
|
|
155
|
+
| **Safe Area 내부** | 44x44pt (iOS), 48x48dp (Android) |
|
|
156
|
+
| **하단 CTA** | Home Indicator 위 최소 8pt 여유 |
|
|
157
|
+
| **노치 근처** | 터치 감도 낮음, 중요 버튼 배치 금지 |
|
|
158
|
+
|
|
159
|
+
### 가로 모드
|
|
160
|
+
|
|
161
|
+
| 항목 | 사양 |
|
|
162
|
+
|------|------|
|
|
163
|
+
| **좌우 Inset** | 44pt (노치 회피) |
|
|
164
|
+
| **컨텐츠 중앙** | 좌우 Safe Area 내 배치 |
|
|
165
|
+
| **풀스크린 미디어** | Safe Area 무시 가능 |
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## 6. 플랫폼별 체크리스트
|
|
170
|
+
|
|
171
|
+
### iOS
|
|
172
|
+
- [ ] safeAreaInsets 또는 safeAreaLayoutGuide 사용
|
|
173
|
+
- [ ] Home Indicator 영역 (34pt) 고려
|
|
174
|
+
- [ ] Dynamic Island 지원 시 Live Activities 통합
|
|
175
|
+
- [ ] 가로 모드 좌우 44pt 인셋 확인
|
|
176
|
+
|
|
177
|
+
### Android
|
|
178
|
+
- [ ] WindowInsetsCompat 사용 (하드코딩 금지)
|
|
179
|
+
- [ ] Edge-to-Edge 강제 적용 대응 (SDK 35+)
|
|
180
|
+
- [ ] Display Cutout 모드 설정
|
|
181
|
+
- [ ] 제스처 네비게이션 영역 고려
|
|
182
|
+
|
|
183
|
+
### Foldable
|
|
184
|
+
- [ ] WindowLayoutInfo 구독
|
|
185
|
+
- [ ] FoldingFeature.isSeparating 체크
|
|
186
|
+
- [ ] Tabletop/Book 자세별 UI 최적화
|
|
187
|
+
- [ ] 힌지 근처 중요 콘텐츠 배치 금지
|
|
188
|
+
|
|
189
|
+
### Web/PWA
|
|
190
|
+
- [ ] viewport-fit=cover 추가
|
|
191
|
+
- [ ] env(safe-area-inset-*) 사용
|
|
192
|
+
- [ ] Fallback 값 제공
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## 참고
|
|
197
|
+
|
|
198
|
+
- [Apple Developer: Safe Area](https://developer.apple.com/documentation/uikit/uiview/safeareainsets)
|
|
199
|
+
- [Android: Display Cutout](https://developer.android.com/develop/ui/views/layout/display-cutout)
|
|
200
|
+
- [Android: Edge-to-Edge](https://developer.android.com/develop/ui/views/layout/edge-to-edge)
|
|
201
|
+
- [Samsung: Foldable Design](https://developer.samsung.com/one-ui/largescreen-and-foldable/)
|
|
202
|
+
- [MDN: CSS env()](https://developer.mozilla.org/en-US/docs/Web/CSS/env)
|