atomic-css-cli 1.0.0 → 1.0.1
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/README.md +610 -0
- package/package.json +1 -1
package/README.md
ADDED
|
@@ -0,0 +1,610 @@
|
|
|
1
|
+
# Atomic CSS CLI
|
|
2
|
+
|
|
3
|
+
HTML 클래스명을 기반으로 CSS 규칙을 자동 생성하는 CLI 도구입니다.
|
|
4
|
+
|
|
5
|
+
사전 정의된 패턴을 인식하여 각 클래스에 대응하는 스타일을 즉시 생성함으로써 CSS 작성의 번거로움을 획기적으로 줄여줍니다. 클래스 이름이 곧 스타일 자체를 설명하기 때문에 누구나 쉽고 빠르게 클래스를 조합하여 다양한 디자인을 만들 수 있습니다.
|
|
6
|
+
|
|
7
|
+
> **VSCode 확장도 있습니다**: [VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=Drangon-Knight.atomicss)에서 설치하면 파일 저장 시 자동으로 CSS가 생성됩니다.
|
|
8
|
+
|
|
9
|
+
## 왜 Atomic CSS인가?
|
|
10
|
+
|
|
11
|
+
- **제로 CSS 작성**: 별도 CSS 파일 작성이 불필요합니다. HTML 클래스명만으로 모든 시각적 스타일을 처리합니다.
|
|
12
|
+
- **무제한 자유도**: 다른 유틸리티 프레임워크와 달리 미리 정해진 값에 제한받지 않습니다. `gap37px`, `w847px`, `fs1-3rem` 등 어떤 수치와 단위든 자유롭게 조합할 수 있습니다.
|
|
13
|
+
- **직관적 네이밍**: CSS 속성과 값의 앞글자를 조합하는 규칙 하나만 알면, 문서 없이도 대부분의 클래스명을 추론할 수 있습니다.
|
|
14
|
+
- **14단계 반응형**: QHD(2560px)부터 Ultra Small(420px)까지 14개 브레이크포인트를 지원하여 세밀한 반응형 대응이 가능합니다.
|
|
15
|
+
- **32개 의사 클래스**: hover, focus, disabled, valid 등 32개 의사 클래스를 프리픽스 방식으로 간편하게 적용합니다.
|
|
16
|
+
- **협업 효율**: HTML에서 바로 디자인 변경 및 조정이 가능하여, CSS 파일을 오가며 작업하는 시간이 대폭 줄어듭니다.
|
|
17
|
+
- **제로 의존성**: 외부 CSS 라이브러리 없이 사용 가능합니다.
|
|
18
|
+
- **스타일 일관성**: 전체 프로젝트에 걸쳐 동일한 유틸리티 클래스를 사용하므로 스타일의 일관성이 자연스럽게 유지됩니다.
|
|
19
|
+
|
|
20
|
+
## 핵심 컨셉
|
|
21
|
+
|
|
22
|
+
CSS 속성과 값의 **앞글자를 조합**하여 클래스명을 만듭니다.
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
display: flex → df
|
|
26
|
+
justify-content: center → jcc
|
|
27
|
+
align-items: center → aic
|
|
28
|
+
flex-direction: column → fdc
|
|
29
|
+
white-space: nowrap → wsn
|
|
30
|
+
text-overflow: ellipsis → toe
|
|
31
|
+
object-fit: cover → ofc
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
이 규칙만 알면 문서에 없는 속성도 추론할 수 있습니다.
|
|
35
|
+
|
|
36
|
+
```html
|
|
37
|
+
<div class="df jcc aic gap2rem p2rem bgFFFFFF br8px">Hello Atomic CSS!</div>
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
생성되는 CSS:
|
|
41
|
+
|
|
42
|
+
```css
|
|
43
|
+
.df {
|
|
44
|
+
display: flex;
|
|
45
|
+
}
|
|
46
|
+
.jcc {
|
|
47
|
+
justify-content: center;
|
|
48
|
+
}
|
|
49
|
+
.aic {
|
|
50
|
+
align-items: center;
|
|
51
|
+
}
|
|
52
|
+
.gap2rem {
|
|
53
|
+
gap: 2rem;
|
|
54
|
+
}
|
|
55
|
+
.p2rem {
|
|
56
|
+
padding: 2rem;
|
|
57
|
+
}
|
|
58
|
+
.bgFFFFFF {
|
|
59
|
+
background-color: #ffffff;
|
|
60
|
+
}
|
|
61
|
+
.br8px {
|
|
62
|
+
border-radius: 8px;
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## 설치
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
npm install -g atomic-css-cli
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## 사용법
|
|
75
|
+
|
|
76
|
+
### 명령어
|
|
77
|
+
|
|
78
|
+
| 명령어 | 설명 |
|
|
79
|
+
| --- | --- |
|
|
80
|
+
| `atomic-css build [dir]` | 파일을 스캔하고 CSS를 일괄 생성 (1회) |
|
|
81
|
+
| `atomic-css watch [dir]` | 파일 변경을 감지하여 CSS 자동 생성 |
|
|
82
|
+
| `atomic-css init` | `.atomic.json` 설정 파일 생성 |
|
|
83
|
+
|
|
84
|
+
### 옵션
|
|
85
|
+
|
|
86
|
+
| 옵션 | 설명 |
|
|
87
|
+
| --- | --- |
|
|
88
|
+
| `-o, --output <path>` | CSS 출력 디렉토리 |
|
|
89
|
+
| `-d, --debug` | 미니파이되지 않은 `atomic.css`도 함께 생성 |
|
|
90
|
+
| `-e, --extensions <exts>` | 스캔할 파일 확장자 (쉼표 구분) |
|
|
91
|
+
| `-c, --config <path>` | `.atomic.json`이 위치한 프로젝트 루트 경로 |
|
|
92
|
+
|
|
93
|
+
### 빠른 시작
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
# 1. 설정 파일 생성
|
|
97
|
+
atomic-css init
|
|
98
|
+
|
|
99
|
+
# 2. 일괄 빌드
|
|
100
|
+
atomic-css build
|
|
101
|
+
|
|
102
|
+
# 3. 워치 모드 (개발 중)
|
|
103
|
+
atomic-css watch
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### 사용 예시
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
# 현재 디렉토리의 HTML 파일을 스캔하여 CSS 생성
|
|
110
|
+
atomic-css build
|
|
111
|
+
|
|
112
|
+
# src 디렉토리를 스캔하고 dist/css에 출력
|
|
113
|
+
atomic-css build src -o dist/css
|
|
114
|
+
|
|
115
|
+
# tsx, jsx 파일도 포함하여 스캔
|
|
116
|
+
atomic-css build src -e tsx,jsx,html
|
|
117
|
+
|
|
118
|
+
# 디버그 모드 (미니파이 + 원본 CSS 모두 생성)
|
|
119
|
+
atomic-css build -d
|
|
120
|
+
|
|
121
|
+
# 워치 모드로 개발
|
|
122
|
+
atomic-css watch src -o dist/css -e html,tsx
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Programmatic API
|
|
126
|
+
|
|
127
|
+
```js
|
|
128
|
+
const {
|
|
129
|
+
generateCSSRules,
|
|
130
|
+
parseClassName,
|
|
131
|
+
build,
|
|
132
|
+
watch,
|
|
133
|
+
extractClassesFromText,
|
|
134
|
+
loadConfig
|
|
135
|
+
} = require("atomic-css-cli");
|
|
136
|
+
|
|
137
|
+
// 텍스트에서 클래스 추출
|
|
138
|
+
const classes = extractClassesFromText('<div class="df jcc aic">');
|
|
139
|
+
|
|
140
|
+
// 클래스명 → CSS 규칙 생성
|
|
141
|
+
const rules = generateCSSRules(["df", "jcc", "aic"]);
|
|
142
|
+
|
|
143
|
+
// 프로그래밍 방식으로 빌드
|
|
144
|
+
await build("./src", { output: "./dist/css" });
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## 설정 파일 (.atomic.json)
|
|
148
|
+
|
|
149
|
+
프로젝트 루트에 `.atomic.json` 파일을 생성하면 프로젝트별로 동작을 커스터마이징할 수 있습니다. 파일이 없으면 기본 설정으로 동작합니다.
|
|
150
|
+
|
|
151
|
+
### 옵션 상세
|
|
152
|
+
|
|
153
|
+
| 옵션 | 타입 | 기본값 | 설명 |
|
|
154
|
+
| --- | --- | --- | --- |
|
|
155
|
+
| `cssDirectoryPath` | `string` | `"/assets/css/common/"` | 생성될 CSS 파일의 저장 경로. 워크스페이스 루트 기준 상대 경로 |
|
|
156
|
+
| `extensions` | `string[]` | `[".html"]` | 클래스를 추출할 대상 파일 확장자 |
|
|
157
|
+
| `selectedLanguages` | `string[]` | `["html"]` | VSCode 확장 전용 옵션 (CLI에서는 미사용) |
|
|
158
|
+
| `projects` | `array` | — | 멀티프로젝트 설정. 파일 경로에 따라 서로 다른 위치에 CSS를 생성 |
|
|
159
|
+
|
|
160
|
+
### 기본 설정 (HTML 프로젝트)
|
|
161
|
+
|
|
162
|
+
```json
|
|
163
|
+
{
|
|
164
|
+
"cssDirectoryPath": "/assets/css/common/",
|
|
165
|
+
"extensions": [".html"]
|
|
166
|
+
}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### React / Next.js
|
|
170
|
+
|
|
171
|
+
```json
|
|
172
|
+
{
|
|
173
|
+
"cssDirectoryPath": "/src/assets/css/",
|
|
174
|
+
"extensions": [".html", ".tsx", ".jsx"]
|
|
175
|
+
}
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### Vue / Nuxt
|
|
179
|
+
|
|
180
|
+
```json
|
|
181
|
+
{
|
|
182
|
+
"cssDirectoryPath": "/src/assets/css/",
|
|
183
|
+
"extensions": [".html", ".vue"]
|
|
184
|
+
}
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### PHP (Laravel, WordPress 등)
|
|
188
|
+
|
|
189
|
+
```json
|
|
190
|
+
{
|
|
191
|
+
"cssDirectoryPath": "/public/css/",
|
|
192
|
+
"extensions": [".html", ".php", ".blade.php"]
|
|
193
|
+
}
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### 멀티프로젝트 (다국어/멀티 출력)
|
|
197
|
+
|
|
198
|
+
`projects` 배열을 사용하면 파일 경로에 따라 CSS 출력 위치를 분리할 수 있습니다.
|
|
199
|
+
|
|
200
|
+
```json
|
|
201
|
+
{
|
|
202
|
+
"cssDirectoryPath": "/assets/css/common/",
|
|
203
|
+
"extensions": [".html", ".php"],
|
|
204
|
+
"projects": [
|
|
205
|
+
{
|
|
206
|
+
"name": "korean",
|
|
207
|
+
"sources": ["/src/ko/", "/pages/ko/"],
|
|
208
|
+
"output": "/assets/css/ko/"
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
"name": "english",
|
|
212
|
+
"sources": ["/src/en/", "/pages/en/"],
|
|
213
|
+
"output": "/assets/css/en/"
|
|
214
|
+
}
|
|
215
|
+
]
|
|
216
|
+
}
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
| projects 옵션 | 타입 | 설명 |
|
|
220
|
+
| --- | --- | --- |
|
|
221
|
+
| `name` | `string` | 프로젝트 식별 이름 (CSS 파일 상단에 표시) |
|
|
222
|
+
| `sources` | `string[]` | 이 프로젝트에 속하는 소스 디렉토리 경로 목록 |
|
|
223
|
+
| `output` | `string` | 이 프로젝트의 CSS 출력 경로 |
|
|
224
|
+
|
|
225
|
+
### HTML에 연결
|
|
226
|
+
|
|
227
|
+
```html
|
|
228
|
+
<link rel="stylesheet" href="/assets/css/common/atomic.min.css" />
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## 네이밍 규칙
|
|
234
|
+
|
|
235
|
+
### 단위
|
|
236
|
+
|
|
237
|
+
| 단위 | 표기 | 예시 |
|
|
238
|
+
| --- | --- | --- |
|
|
239
|
+
| px | `px` | `w100px`, `gap8px` |
|
|
240
|
+
| % | `p` | `w50p` → `width: 50%` |
|
|
241
|
+
| rem | `rem` | `fs1-5rem` → `font-size: 1.5rem` |
|
|
242
|
+
| em | `em` | `p1em` |
|
|
243
|
+
| vh / vw | `vh`, `vw` | `h100vh`, `w100vw` |
|
|
244
|
+
| vmin / vmax | `vmin`, `vmax` | `w50vmin` |
|
|
245
|
+
| fr | `fr` | `gtc1fr-2fr` |
|
|
246
|
+
|
|
247
|
+
> `html { font-size: 10px }` 기준: `1rem = 10px` → `2rem = 20px`, `10rem = 100px`
|
|
248
|
+
|
|
249
|
+
### 하이픈(-) 사용
|
|
250
|
+
|
|
251
|
+
| 용도 | 예시 | 결과 |
|
|
252
|
+
| --- | --- | --- |
|
|
253
|
+
| 소수점 | `gap1-5rem` | `1.5rem` |
|
|
254
|
+
| 값 구분 | `gtc1fr-2fr-1fr` | `1fr 2fr 1fr` |
|
|
255
|
+
| 미디어 쿼리 | `sm-dn` | `@media(max-width:768px)` |
|
|
256
|
+
| 의사 클래스 | `hover-bg000000` | `:hover` |
|
|
257
|
+
|
|
258
|
+
### 특수 표기
|
|
259
|
+
|
|
260
|
+
| 표기 | 설명 | 예시 | 결과 |
|
|
261
|
+
| --- | --- | --- | --- |
|
|
262
|
+
| `i` 접미사 | `!important` | `w100pxi` | `width: 100px !important` |
|
|
263
|
+
| `neg-` 접두사 | 음수값 | `neg-mt10px` | `margin-top: -10px` |
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
## Display
|
|
268
|
+
|
|
269
|
+
| 클래스 | CSS |
|
|
270
|
+
| --- | --- |
|
|
271
|
+
| `df` | `display: flex` |
|
|
272
|
+
| `dif` | `display: inline-flex` |
|
|
273
|
+
| `dg` | `display: grid` |
|
|
274
|
+
| `db` | `display: block` |
|
|
275
|
+
| `dib` | `display: inline-block` |
|
|
276
|
+
| `di` | `display: inline` |
|
|
277
|
+
| `dn` | `display: none` |
|
|
278
|
+
| `dt` | `display: table` |
|
|
279
|
+
| `dtc` | `display: table-cell` |
|
|
280
|
+
|
|
281
|
+
## Flexbox
|
|
282
|
+
|
|
283
|
+
| 클래스 | CSS |
|
|
284
|
+
| --- | --- |
|
|
285
|
+
| `fdr` / `fdrr` | `flex-direction: row / row-reverse` |
|
|
286
|
+
| `fdc` / `fdcr` | `flex-direction: column / column-reverse` |
|
|
287
|
+
| `fwn` / `fww` / `fwr` | `flex-wrap: nowrap / wrap / wrap-reverse` |
|
|
288
|
+
| `jcfs` / `jcfe` / `jcc` | `justify-content: flex-start / flex-end / center` |
|
|
289
|
+
| `jcsb` / `jcsa` / `jcse` | `justify-content: space-between / space-around / space-evenly` |
|
|
290
|
+
| `ais` / `aifs` / `aife` / `aic` | `align-items: stretch / flex-start / flex-end / center` |
|
|
291
|
+
| `fs0` / `fs1` | `flex-shrink: 0 / 1` |
|
|
292
|
+
| `fg1` / `fg2` | `flex-grow: 1 / 2` |
|
|
293
|
+
| `fa` / `fi` | `flex: auto / initial` |
|
|
294
|
+
|
|
295
|
+
## Grid
|
|
296
|
+
|
|
297
|
+
| 패턴 | 예시 | CSS |
|
|
298
|
+
| --- | --- | --- |
|
|
299
|
+
| 직접 지정 | `gtc1fr-2fr-1fr` | `grid-template-columns: 1fr 2fr 1fr` |
|
|
300
|
+
| repeat | `gtcr3-1fr` | `repeat(3, 1fr)` |
|
|
301
|
+
| auto-fit | `gtcrfit-minmax28rem-1fr` | `repeat(auto-fit, minmax(28rem, 1fr))` |
|
|
302
|
+
| auto-fill | `gtcrfill-minmax250px-1fr` | `repeat(auto-fill, minmax(250px, 1fr))` |
|
|
303
|
+
| rows | `gtrauto-1fr-auto` | `grid-template-rows: auto 1fr auto` |
|
|
304
|
+
| rows repeat | `gtrr3-1fr` | `repeat(3, 1fr)` |
|
|
305
|
+
| minmax | `gtcminmax100px-1fr` | `minmax(100px, 1fr)` |
|
|
306
|
+
| calc | `gtccalc100p-200px-1fr` | `calc(100% - 200px) 1fr` |
|
|
307
|
+
|
|
308
|
+
## Spacing
|
|
309
|
+
|
|
310
|
+
| 패턴 | 속성 |
|
|
311
|
+
| --- | --- |
|
|
312
|
+
| `m`, `mt`, `mr`, `mb`, `ml` | margin (방향) |
|
|
313
|
+
| `p`, `pt`, `pr`, `pb`, `pl` | padding (방향) |
|
|
314
|
+
| `gap`, `rg`, `cg` | gap, row-gap, column-gap |
|
|
315
|
+
| `mta`, `mra`, `mba`, `mla` | margin-방향: auto |
|
|
316
|
+
| `p10px-20px` | padding shorthand (2~4값) |
|
|
317
|
+
|
|
318
|
+
> 간격값은 4의 배수 권장: `4px`, `8px`, `12px`, `16px`, `2rem`, `2-4rem`...
|
|
319
|
+
|
|
320
|
+
## Color
|
|
321
|
+
|
|
322
|
+
| 패턴 | 예시 | CSS |
|
|
323
|
+
| --- | --- | --- |
|
|
324
|
+
| `c` + HEX 6자리 | `cFFFFFF` | `color: #FFFFFF` |
|
|
325
|
+
| `bg` + HEX 6자리 | `bg000000` | `background-color: #000000` |
|
|
326
|
+
| `bc` + HEX 6자리 | `bcDDDDDD` | `border-color: #DDDDDD` |
|
|
327
|
+
| RGBA | `c255-0-0-50` | `color: rgba(255,0,0,0.5)` |
|
|
328
|
+
| RGBA 배경 | `bg0-0-0-80` | `background-color: rgba(0,0,0,0.8)` |
|
|
329
|
+
| Opacity | `o50`, `o80` | `opacity: 0.5`, `opacity: 0.8` |
|
|
330
|
+
|
|
331
|
+
> 소문자 HEX 입력 시 자동 대문자 변환: `cffffff` → `cFFFFFF`
|
|
332
|
+
|
|
333
|
+
## Border
|
|
334
|
+
|
|
335
|
+
| 패턴 | 예시 | CSS |
|
|
336
|
+
| --- | --- | --- |
|
|
337
|
+
| 단축 | `b1pxsolidDDDDDD` | `border: 1px solid #DDDDDD` |
|
|
338
|
+
| 방향 | `bt2pxdashed000000` | `border-top: 2px dashed #000000` |
|
|
339
|
+
| radius | `br8px`, `br1rem` | `border-radius` |
|
|
340
|
+
| none | `bn` | `border: none` |
|
|
341
|
+
| 방향 제거 | `bt0`, `br0`, `bb0`, `bl0` | `border-방향: 0` |
|
|
342
|
+
|
|
343
|
+
## Shadow
|
|
344
|
+
|
|
345
|
+
| 패턴 | 예시 | CSS |
|
|
346
|
+
| --- | --- | --- |
|
|
347
|
+
| Box Shadow (HEX) | `bs0px4px12px0px0-0-0-10` | `box-shadow: 0px 4px 12px 0px rgba(0,0,0,0.1)` |
|
|
348
|
+
| Box Shadow (RGBA) | `bs2px4px10px0pxFF0000` | `box-shadow: 2px 4px 10px 0px #FF0000` |
|
|
349
|
+
| Inset | `bsi...` | `box-shadow: inset ...` |
|
|
350
|
+
| Text Shadow | `ts0px0px10pxFF00FF` | `text-shadow: 0px 0px 10px #FF00FF` |
|
|
351
|
+
| None | `bsn` | `box-shadow: none` |
|
|
352
|
+
|
|
353
|
+
## Transform
|
|
354
|
+
|
|
355
|
+
| 클래스 | CSS |
|
|
356
|
+
| --- | --- |
|
|
357
|
+
| `ttx10px` | `transform: translateX(10px)` |
|
|
358
|
+
| `tty20px` | `transform: translateY(20px)` |
|
|
359
|
+
| `tr45deg` | `transform: rotate(45deg)` |
|
|
360
|
+
| `ts1-5` | `transform: scale(1.5)` |
|
|
361
|
+
| `ts1-5_2` | `transform: scale(1.5, 2)` |
|
|
362
|
+
|
|
363
|
+
## Transition
|
|
364
|
+
|
|
365
|
+
| 클래스 | CSS |
|
|
366
|
+
| --- | --- |
|
|
367
|
+
| `tall200msease` | `transition: all 200ms ease` |
|
|
368
|
+
| `tall300ms` | `transition: all 300ms` |
|
|
369
|
+
| `topacity500ms` | `transition: opacity 500ms` |
|
|
370
|
+
| `tall200mscb0-50-50-100` | `transition: all 200ms cubic-bezier(...)` |
|
|
371
|
+
| `tnone` | `transition: none` |
|
|
372
|
+
|
|
373
|
+
## Filter
|
|
374
|
+
|
|
375
|
+
| 클래스 | CSS |
|
|
376
|
+
| --- | --- |
|
|
377
|
+
| `fb5px` | `filter: blur(5px)` |
|
|
378
|
+
| `fbr120p` | `filter: brightness(120%)` |
|
|
379
|
+
| `fc80p` | `filter: contrast(80%)` |
|
|
380
|
+
| `fg100p` | `filter: grayscale(100%)` |
|
|
381
|
+
| `fhr90deg` | `filter: hue-rotate(90deg)` |
|
|
382
|
+
| `fi100p` | `filter: invert(100%)` |
|
|
383
|
+
| `fo80p` | `filter: opacity(80%)` |
|
|
384
|
+
| `fsa150p` | `filter: saturate(150%)` |
|
|
385
|
+
| `fse50p` | `filter: sepia(50%)` |
|
|
386
|
+
| `fds2px4px8pxFF0000` | `filter: drop-shadow(2px 4px 8px #FF0000)` |
|
|
387
|
+
|
|
388
|
+
> Backdrop Filter: `bf` 접두사 동일 (예: `bfb10px` → `backdrop-filter: blur(10px)`)
|
|
389
|
+
|
|
390
|
+
## 미디어 쿼리 (14개 Breakpoint)
|
|
391
|
+
|
|
392
|
+
모든 클래스에 프리픽스를 붙여 반응형 적용:
|
|
393
|
+
|
|
394
|
+
| 프리픽스 | Breakpoint | | 프리픽스 | Breakpoint |
|
|
395
|
+
| --- | --- | --- | --- | --- |
|
|
396
|
+
| `qh-` | 2560px | | `rg-` | 1080px |
|
|
397
|
+
| `uh-` | 2160px | | `md-` | 1024px |
|
|
398
|
+
| `kk-` | 2048px | | `sm-` | 768px |
|
|
399
|
+
| `fh-` | 1920px | | `es-` | 640px |
|
|
400
|
+
| `hl-` | 1800px | | `us-` | 420px |
|
|
401
|
+
| `sl-` | 1700px | | | |
|
|
402
|
+
| `ul-` | 1600px | | | |
|
|
403
|
+
| `el-` | 1440px | | | |
|
|
404
|
+
| `lg-` | 1280px | | | |
|
|
405
|
+
|
|
406
|
+
```html
|
|
407
|
+
<!-- 3열 → 2열 → 1열 반응형 -->
|
|
408
|
+
<div class="dg gtcr3-1fr md-gtcr2-1fr sm-gtc1fr gap2rem">
|
|
409
|
+
<!-- 반응형 숨김 -->
|
|
410
|
+
<div class="db sm-dn">데스크탑만</div>
|
|
411
|
+
<div class="dn sm-db">모바일만</div>
|
|
412
|
+
</div>
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
## Pseudo Class (32개)
|
|
416
|
+
|
|
417
|
+
모든 클래스에 프리픽스를 붙여 상태별 스타일 적용:
|
|
418
|
+
|
|
419
|
+
| 카테고리 | 프리픽스 |
|
|
420
|
+
| --- | --- |
|
|
421
|
+
| 인터랙션 | `hover-`, `focus-`, `active-`, `focus-within-`, `focus-visible-` |
|
|
422
|
+
| 입력 상태 | `disabled-`, `enabled-`, `checked-`, `indeterminate-` |
|
|
423
|
+
| 폼 검증 | `valid-`, `invalid-`, `required-`, `optional-`, `in-range-`, `out-of-range-` |
|
|
424
|
+
| 링크 | `link-`, `visited-`, `any-link-`, `target-` |
|
|
425
|
+
| 기타 | `placeholder-shown-`, `empty-`, `read-only-`, `fullscreen-`, `autofill-`, `modal-` 등 |
|
|
426
|
+
|
|
427
|
+
```html
|
|
428
|
+
<button class="bg007BFF hover-bg0056B3 active-ts0_98 disabled-o50 tall200msease cp">버튼</button>
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
## Pseudo Element
|
|
432
|
+
|
|
433
|
+
| 키워드 | CSS |
|
|
434
|
+
| --- | --- |
|
|
435
|
+
| `before` | `::before` |
|
|
436
|
+
| `after` | `::after` |
|
|
437
|
+
|
|
438
|
+
## 관계 선택자
|
|
439
|
+
|
|
440
|
+
부모 요소의 상태에 따라 자식/형제 요소를 스타일링:
|
|
441
|
+
|
|
442
|
+
| 결합자 | 키워드 | CSS |
|
|
443
|
+
| --- | --- | --- |
|
|
444
|
+
| `>` 직접 자식 | `child` | `.trigger:hover > target` |
|
|
445
|
+
| ` ` 모든 자손 | `children` | `.trigger:hover target` |
|
|
446
|
+
| `+` 인접 형제 | `next` | `.trigger:hover + target` |
|
|
447
|
+
| `~` 일반 형제 | `siblings` | `.trigger:hover ~ target` |
|
|
448
|
+
|
|
449
|
+
```html
|
|
450
|
+
<!-- card에 hover 시 자식 img에 scale 적용 -->
|
|
451
|
+
<div class="card-hover-child-img-ts1-1"></div>
|
|
452
|
+
```
|
|
453
|
+
|
|
454
|
+
## 기타 클래스
|
|
455
|
+
|
|
456
|
+
| 클래스 | CSS |
|
|
457
|
+
| --- | --- |
|
|
458
|
+
| `ar16-9` | `aspect-ratio: 16/9` |
|
|
459
|
+
| `lc3-1-5rem` | 3줄 제한 (line-clamp) |
|
|
460
|
+
| `fw100`~`fw900` | `font-weight` |
|
|
461
|
+
| `zi10`, `zi999` | `z-index` |
|
|
462
|
+
| `w100p`, `h100vh` | `width: 100%`, `height: 100vh` |
|
|
463
|
+
| `wa`, `ha` | `width: auto`, `height: auto` |
|
|
464
|
+
| `mxa` | `margin-left: auto; margin-right: auto` |
|
|
465
|
+
| `cp` | `cursor: pointer` |
|
|
466
|
+
| `usn` | `user-select: none` |
|
|
467
|
+
| `pen` | `pointer-events: none` |
|
|
468
|
+
| `oh` | `overflow: hidden` |
|
|
469
|
+
| `wsn` | `white-space: nowrap` |
|
|
470
|
+
| `toe` | `text-overflow: ellipsis` |
|
|
471
|
+
|
|
472
|
+
---
|
|
473
|
+
|
|
474
|
+
## 실전 예제
|
|
475
|
+
|
|
476
|
+
### Flexbox 센터 정렬
|
|
477
|
+
|
|
478
|
+
```html
|
|
479
|
+
<div class="df jcc aic gap2rem p2rem">
|
|
480
|
+
<span>센터 정렬된 콘텐츠</span>
|
|
481
|
+
</div>
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
### 반응형 그리드 카드
|
|
485
|
+
|
|
486
|
+
```html
|
|
487
|
+
<div class="dg gtcrfit-minmax28rem-1fr gap2rem p2rem">
|
|
488
|
+
<div class="bgFFFFFF br8px p2rem bs0px4px12px0px0-0-0-10">카드 1</div>
|
|
489
|
+
<div class="bgFFFFFF br8px p2rem bs0px4px12px0px0-0-0-10">카드 2</div>
|
|
490
|
+
<div class="bgFFFFFF br8px p2rem bs0px4px12px0px0-0-0-10">카드 3</div>
|
|
491
|
+
</div>
|
|
492
|
+
```
|
|
493
|
+
|
|
494
|
+
### 글래스모피즘
|
|
495
|
+
|
|
496
|
+
```html
|
|
497
|
+
<div class="bfb10px bg255-255-255-20 br16px p2-4rem">
|
|
498
|
+
<h2 class="fs2-4rem fw700 mb16px cFFFFFF">제목</h2>
|
|
499
|
+
<p class="fs1-6rem lh1-6 c255-255-255-80">내용</p>
|
|
500
|
+
</div>
|
|
501
|
+
```
|
|
502
|
+
|
|
503
|
+
### 호버 버튼
|
|
504
|
+
|
|
505
|
+
```html
|
|
506
|
+
<button
|
|
507
|
+
class="
|
|
508
|
+
p12px-2-4rem bg007BFF cFFFFFF br8px fs1-6rem fw600
|
|
509
|
+
cp tall200msease hover-bg0056B3 active-ts0_98
|
|
510
|
+
md-p8px-2rem md-fs1-4rem
|
|
511
|
+
"
|
|
512
|
+
>
|
|
513
|
+
클릭하세요
|
|
514
|
+
</button>
|
|
515
|
+
```
|
|
516
|
+
|
|
517
|
+
### 풀스크린 레이아웃
|
|
518
|
+
|
|
519
|
+
```html
|
|
520
|
+
<div class="dg gtrauto-1fr-auto h100vh">
|
|
521
|
+
<header class="p16px bg000000 cFFFFFF">헤더</header>
|
|
522
|
+
<main class="p2rem oa">콘텐츠</main>
|
|
523
|
+
<footer class="p16px bgF0F0F0">푸터</footer>
|
|
524
|
+
</div>
|
|
525
|
+
```
|
|
526
|
+
|
|
527
|
+
### 사이드바 레이아웃
|
|
528
|
+
|
|
529
|
+
```html
|
|
530
|
+
<div class="dg gtc25rem-1fr gap2rem md-gtc1fr">
|
|
531
|
+
<aside class="p2rem bgF5F5F5 md-order2">사이드바</aside>
|
|
532
|
+
<main class="p2rem md-order1">콘텐츠</main>
|
|
533
|
+
</div>
|
|
534
|
+
```
|
|
535
|
+
|
|
536
|
+
### 텍스트 말줄임
|
|
537
|
+
|
|
538
|
+
```html
|
|
539
|
+
<p class="lc3-1-5rem">이 텍스트는 3줄까지만 표시되고 나머지는 ...으로 말줄임 처리됩니다.</p>
|
|
540
|
+
```
|
|
541
|
+
|
|
542
|
+
## AI Integration — MCP Server
|
|
543
|
+
|
|
544
|
+
> **AI가 Atomic CSS를 완벽하게 이해합니다.**
|
|
545
|
+
|
|
546
|
+
Atomic CSS는 AI 코딩 도구를 위한 전용 **MCP(Model Context Protocol) 서버**를 제공합니다. 이것은 단순한 문서 참조가 아닙니다. AI가 Atomic CSS의 모든 클래스 체계를 **실시간으로 조회하고, 검색하고, 생성**할 수 있도록 설계된 AI 전용 인터페이스입니다.
|
|
547
|
+
|
|
548
|
+
### 왜 MCP인가?
|
|
549
|
+
|
|
550
|
+
일반적인 CSS 프레임워크를 AI와 사용할 때의 문제:
|
|
551
|
+
|
|
552
|
+
- AI가 클래스명을 **추측**하거나 **잘못된 클래스**를 생성
|
|
553
|
+
- 문서를 매번 컨텍스트에 넣어야 하는 **토큰 낭비**
|
|
554
|
+
- 프레임워크 업데이트 시 AI가 **구버전 정보**를 사용
|
|
555
|
+
|
|
556
|
+
**Atomic CSS + MCP는 이 문제를 완전히 해결합니다:**
|
|
557
|
+
|
|
558
|
+
- AI가 클래스명을 추측하지 않고 MCP 서버에 **직접 질의**
|
|
559
|
+
- 항상 **최신 데이터** 기반으로 정확한 클래스 반환
|
|
560
|
+
- 컨텍스트 오염 없이 **필요한 순간에만** 정보를 가져옴
|
|
561
|
+
|
|
562
|
+
### 제공 도구 (Tools)
|
|
563
|
+
|
|
564
|
+
| 도구 | 설명 | 예시 입력 |
|
|
565
|
+
| --- | --- | --- |
|
|
566
|
+
| `lookup_class` | 클래스명 → CSS 변환 결과 조회 | `df jcc aic gap2rem` |
|
|
567
|
+
| `search_by_css` | CSS 속성/값으로 클래스 역검색 | `justify-content`, `hidden`, `shadow` |
|
|
568
|
+
| `list_classes` | 카테고리별 전체 클래스 목록 | `flexbox`, `grid`, `pseudo`, `media` |
|
|
569
|
+
|
|
570
|
+
### 설정 방법
|
|
571
|
+
|
|
572
|
+
프로젝트 루트에 `.mcp.json` 파일을 생성하면 **설정 없이 즉시 연동**됩니다:
|
|
573
|
+
|
|
574
|
+
```json
|
|
575
|
+
{
|
|
576
|
+
"mcpServers": {
|
|
577
|
+
"atomic-css": {
|
|
578
|
+
"type": "sse",
|
|
579
|
+
"url": "https://mcp.atomiccss.dev/sse"
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
```
|
|
584
|
+
|
|
585
|
+
> `https://mcp.atomiccss.dev`는 Atomic CSS 전용 원격 MCP 서버입니다. 로컬 설치가 필요 없으며, 인터넷 연결만으로 모든 AI 도구에서 사용할 수 있습니다.
|
|
586
|
+
|
|
587
|
+
### 지원 도구
|
|
588
|
+
|
|
589
|
+
| AI 도구 | 설정 파일 | 비고 |
|
|
590
|
+
| --- | --- | --- |
|
|
591
|
+
| **Claude Code** | `.mcp.json` | 프로젝트 루트에 배치 |
|
|
592
|
+
| **Cursor** | `.cursor/mcp.json` | SSE 타입 지원 |
|
|
593
|
+
| **Windsurf** | `.windsurf/mcp.json` | SSE 타입 지원 |
|
|
594
|
+
|
|
595
|
+
---
|
|
596
|
+
|
|
597
|
+
## 문서 및 링크
|
|
598
|
+
|
|
599
|
+
| | 링크 | 설명 |
|
|
600
|
+
| --- | --- | --- |
|
|
601
|
+
| Web | [atomiccss.dev](https://atomiccss.dev) | 공식 문서 — 전체 클래스 레퍼런스, 실시간 미리보기 |
|
|
602
|
+
| MCP | [mcp.atomiccss.dev](https://mcp.atomiccss.dev) | AI 전용 MCP 서버 — Claude, Cursor 등에서 즉시 연동 |
|
|
603
|
+
| Marketplace | [VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=Drangon-Knight.atomicss) | VSCode 확장 설치 |
|
|
604
|
+
| npm | [atomic-css-cli](https://www.npmjs.com/package/atomic-css-cli) | npm 패키지 |
|
|
605
|
+
|
|
606
|
+
---
|
|
607
|
+
|
|
608
|
+
## 지원 및 문의
|
|
609
|
+
|
|
610
|
+
eorud0713@gmail.com
|