네이밍 규칙

Atomic CSS에는 규칙이 단 하나뿐입니다. CSS 속성과 값에서 각 단어의 첫 글자를 뽑아 조합하면 그것이 바로 클래스명입니다. 이 원리만 이해하면 거의 모든 클래스를 유추할 수 있습니다.

핵심 공식

CSS 속성: 값 → 속성의 첫 글자들 + 값의 첫 글자들 = 클래스명

기본 규칙

숫자가 없는 키워드 값을 가진 속성은 첫 글자만 조합하면 됩니다.

작동 방식

display: flex

d(display)+f(flex)=df

justify-content: center

j(justify)+c(content)+c(center)=jcc

align-items: flex-start

a(align)+i(items)+f(flex)+s(start)=aifs

flex-direction: column

f(flex)+d(direction)+c(column)=fdc

margin-top: 16px

m(margin)+t(top)+16px(값 + 단위)=mt16px
CSS분해클래스
display: flexd(isplay) + f(lex)df
display: gridd(isplay) + g(rid)dg
display: noned(isplay) + n(one)dn
display: blockd(isplay) + b(lock)db
display: inline-blockd(isplay) + i(nline)-b(lock)dib
justify-content: centerj(ustify)-c(ontent) + c(enter)jcc
justify-content: space-betweenj(ustify)-c(ontent) + s(pace)-b(etween)jcsb
justify-content: flex-endj(ustify)-c(ontent) + f(lex)-e(nd)jcfe
align-items: centera(lign)-i(tems) + c(enter)aic
align-items: flex-starta(lign)-i(tems) + f(lex)-s(tart)aifs
align-items: flex-enda(lign)-i(tems) + f(lex)-e(nd)aife
flex-direction: columnf(lex)-d(irection) + c(olumn)fdc
flex-direction: rowf(lex)-d(irection) + r(ow)fdr
flex-wrap: wrapf(lex)-w(rap) + w(rap)fww
position: absolutep(osition) + a(bsolute)pa
position: relativep(osition) + r(elative)pr
position: fixedp(osition) + f(ixed)pf
position: stickyp(osition) + s(ticky)ps
overflow: hiddeno(verflow) + h(idden)oh
overflow: autoo(verflow) + a(uto)oa
cursor: pointerc(ursor) + p(ointer)cp
cursor: defaultc(ursor) + d(efault)cd
text-align: centert(ext)-a(lign) + c(enter)tac
text-align: leftt(ext)-a(lign) + l(eft)tal
text-decoration: nonet(ext)-d(ecoration) + n(one)tdn
text-transform: uppercaset(ext)-t(ransform) + u(ppercase)ttu
white-space: nowrapw(hite)-s(pace) + n(owrap)wsn
text-overflow: ellipsist(ext)-o(verflow) + e(llipsis)toe
object-fit: covero(bject)-f(it) + c(over)ofc
user-select: noneu(ser)-s(elect) + n(one)usn
pointer-events: nonep(ointer)-e(vents) + n(one)pen
visibility: hiddenv(isibility) + h(idden)vh

핵심 포인트

패턴을 살펴보세요. flex-direction처럼 하이픈으로 이어진 CSS 단어는 글자를 두 개(f + d) 기여합니다. flex-start(f + s) 같은 값도 마찬가지입니다.

단위가 있는 속성

CSS 값에 숫자와 단위가 포함될 때는 속성 약어 바로 뒤에 붙입니다.

공식: {속성 약어}{숫자}{단위}

CSS분해클래스
margin-top: 16pxm(argin)-t(op) + 16pxmt16px
margin-bottom: 2.4remm(argin)-b(ottom) + 2.4rem (소수점 → 하이픈)mb2-4rem
padding: 16pxp(adding) + 16pxp16px
padding-left: 2remp(adding)-l(eft) + 2rempl2rem
font-size: 1.6remf(ont)-s(ize) + 1.6remfs1-6rem
gap: 8pxgap + 8pxgap8px
gap: 2remgap + 2remgap2rem
width: 100pxw(idth) + 100pxw100px
width: 50%w(idth) + 50 + p(%)w50p
height: 100vhh(eight) + 100vhh100vh
max-width: 120remmax-w(idth) + 120remmaxw120rem
min-height: 100vhmin-h(eight) + 100vhminh100vh
border-radius: 8pxb(order)-r(adius) + 8pxbr8px
line-height: 1.7l(ine)-h(eight) + 1.7 (소수점 → 하이픈)lh1-7
letter-spacing: 0.05eml(etter)-s(pacing) + 0.05emls0-05em
top: 0t(op) + 0t0
left: 50%l(eft) + 50 + p(%)l50p

%는 p로 표기합니다

%는 CSS 클래스명에 쓸 수 없으므로 대신 p를 사용합니다. 예: w50p = width: 50%, h100p = height: 100%.

지원하는 단위

단위용도예시
px픽셀w100px
p (%)퍼센트w50p
rem루트 em (1rem = 10px)fs1-6rem
em상대 emp1em
vh뷰포트 높이h100vh
vw뷰포트 너비w100vw
vmin뷰포트 최소w50vmin
vmax뷰포트 최대w50vmax
fr그리드 분할(fraction)gtc1fr-2fr

하이픈(-) 사용법

하이픈 문자(-)는 맥락에 따라 4가지 서로 다른 역할을 합니다. 이 차이를 이해하는 것이 핵심입니다.

1. 소수점

CSS 클래스명에는 점(.)을 쓸 수 없으므로 하이픈이 소수점을 대신합니다.

클래스CSS 출력
gap1-5remgap: 1.5rem
fs1-4remfont-size: 1.4rem
lh1-7line-height: 1.7
ls0-05emletter-spacing: 0.05em
mt2-4remmargin-top: 2.4rem

2. 값 구분자 (Grid)

grid 클래스에서 하이픈은 여러 값을 구분하며, CSS에서는 공백으로 바뀝니다.

클래스CSS 출력
gtc1fr-2fr-1frgrid-template-columns: 1fr 2fr 1fr
gtc200px-auto-1frgrid-template-columns: 200px auto 1fr
gtrauto-1fr-autogrid-template-rows: auto 1fr auto
gtcr3-1frgrid-template-columns: repeat(3, 1fr)
gtcrfit-minmax28rem-1frgrid-template-columns: repeat(auto-fit, minmax(28rem, 1fr))

3. 미디어 쿼리 접두사

브레이크포인트 접두사 뒤에 하이픈을 붙이면 해당 화면 크기에서만 클래스가 활성화됩니다.

클래스CSS 출력
sm-dn@media (max-width: 768px) { display: none }
md-fdc@media (max-width: 1024px) { flex-direction: column }
lg-gtcr2-1fr@media (max-width: 1280px) { grid-template-columns: repeat(2, 1fr) }
es-db@media (max-width: 640px) { display: block }

4. 가상 클래스 접두사

가상 클래스명 뒤에 하이픈을 붙이면 특정 상태에서 스타일이 적용됩니다.

클래스CSS 출력
hover-bg333333:hover { background-color: #333333 }
hover-cFFFFFF:hover { color: #FFFFFF }
focus-bc6366F1:focus { border-color: #6366F1 }
active-bg000000:active { background-color: #000000 }
hover-o80:hover { opacity: 0.8 }

어떻게 구분하나요?

맥락을 보면 명확합니다. 알려진 브레이크포인트 접두사(sm, md, lg...)로 시작하면 미디어 쿼리이고, hover·focus 등으로 시작하면 가상 클래스입니다. 숫자 사이에 있으면 소수점이거나 값 구분자입니다.

특수 접미사 & 접두사

i 접미사 = !important

아무 클래스 끝에 i를 붙이면 !important가 추가됩니다.

클래스CSS 출력
w100pxiwidth: 100px !important
dnidisplay: none !important
mt0imargin-top: 0 !important
dfidisplay: flex !important
tacitext-align: center !important

neg- 접두사 = 음수 값

neg-를 앞에 붙이면 음수 값이 됩니다.

클래스CSS 출력
neg-mt10pxmargin-top: -10px
neg-ml2remmargin-left: -2rem
neg-t5pxtop: -5px
neg-l10pxleft: -10px
neg-zi5z-index: -5
neg-order1order: -1

p = 퍼센트(%)

p를 단위 접미사로 써서 %를 표현합니다.

클래스CSS 출력
w50pwidth: 50%
w100pwidth: 100%
h100pheight: 100%
l50pleft: 50%
t50ptop: 50%
maxw80pmax-width: 80%

중의성 해소

일부 약어는 여러 CSS 속성에 대응됩니다. 핵심 규칙은 단위의 유무가 어떤 속성을 가리키는지 결정한다는 것입니다.

클래스CSS이유
fs0flex-shrink: 0단위 없음 = flex-shrink
fs1flex-shrink: 1단위 없음 = flex-shrink
fs16pxfont-size: 16px단위 있음 = font-size
fs1-6remfont-size: 1.6rem단위 있음 = font-size
prposition: relative단위 없음 = position
pr16pxpadding-right: 16px단위 있음 = padding-right
br4pxborder-radius: 4px단위 있음 = border-radius
br50pborder-radius: 50%단위 있음 = border-radius
fg1flex-grow: 1단위 없이 숫자만 = flex-grow
fw600font-weight: 600단위 없이 100-900 범위 = font-weight

기억하세요

단위 없음 = 키워드 속성(flex-shrink, position 등), 단위 있음 = 크기 속성(font-size, padding-right, border-radius 등). 이 원칙은 시스템 전체에서 일관되게 적용됩니다.

모든 CSS 속성 유추하기

네이밍 규칙은 보편적입니다. 문서화되지 않은 클래스라도 규칙으로 유추할 수 있습니다. 다양한 CSS 속성에 걸친 예시를 살펴보세요.

CSS분해클래스
table-layout: fixedt(able)-l(ayout) + f(ixed)tlf
border-collapse: collapseb(order)-c(ollapse) + c(ollapse)bcc
object-fit: covero(bject)-f(it) + c(over)ofc
object-fit: containo(bject)-f(it) + c(on)t(ain)ofct
white-space: nowrapw(hite)-s(pace) + n(owrap)wsn
white-space: pre-wrapw(hite)-s(pace) + p(re)-w(rap)wspw
text-overflow: ellipsist(ext)-o(verflow) + e(llipsis)toe
word-break: break-allw(ord)-b(reak) + b(reak)-a(ll)wbba
overflow-wrap: break-wordo(verflow)-w(rap) + b(reak)-w(ord)owbw
backface-visibility: hiddenb(ack)f(ace)-v(isibility) + h(idden)bfvh
box-sizing: border-boxb(ox)-si(z)ing + b(order)-b(ox)bxzbb
list-style-type: nonel(ist)-s(tyle) + n(one)lsn
resize: noner(esi)z(e) + n(one)rzn
appearance: noneapp(earance) + n(one)appn
background-size: coverb(ackground)-s(ize) + c(over)bsc
background-attachment: fixedbg(background)-a(ttachment) + f(ixed)bgaf
vertical-align: middlev(ertical)-a(lign) + m(iddle)vam
caption-side: bottomc(aption)-s(ide) + b(ottom)csb

프로 팁

확신이 서지 않을 때는 MCP 도구(lookup_class, search_by_css)로 유추를 검증하세요. 이 규칙은 95% 이상의 경우에 들어맞습니다.

색상 네이밍

색상은 속성 접두사 뒤에 색상 값(HEX 또는 RGBA)을 붙입니다.

HEX 색상 (6자리)

접두사속성예시CSS 출력
ccolorcFFFFFFcolor: #FFFFFF
ccolorc333333color: #333333
bgbackground-colorbgFFFFFFbackground-color: #FFFFFF
bgbackground-colorbg000000background-color: #000000
bcborder-colorbcDDDDDDborder-color: #DDDDDD
bcborder-colorbc6366F1border-color: #6366F1

RGBA 색상

형식: {접두사}{R}-{G}-{B}-{투명도}, 투명도는 0-100 범위입니다(0.0-1.0에 매핑).

클래스CSS 출력
c255-0-0-100color: rgba(255, 0, 0, 1)
c0-0-0-50color: rgba(0, 0, 0, 0.5)
bg0-0-0-50background-color: rgba(0, 0, 0, 0.5)
bg255-255-255-80background-color: rgba(255, 255, 255, 0.8)
bg99-102-241-10background-color: rgba(99, 102, 241, 0.1)

불투명도

클래스CSS 출력
o0opacity: 0
o50opacity: 0.5
o80opacity: 0.8
o100opacity: 1

빠른 참조

금방 외우게 될, 가장 자주 쓰는 클래스들입니다.

<!-- Flexbox center -->
<div class="df jcc aic">centered content</div>

<!-- Flex column with gap -->
<div class="df fdc gap16px">stacked items</div>

<!-- Header: logo left, nav right -->
<header class="df jcsb aic px2rem py16px">
  <div>Logo</div>
  <nav class="df gap2rem">links</nav>
</header>

<!-- Grid 3 columns -->
<div class="dg gtcr3-1fr gap2rem">cards</div>

<!-- Responsive: 3col → 1col -->
<div class="dg gtcr3-1fr sm-gtc1fr gap2rem">cards</div>

<!-- Responsive show/hide -->
<div class="db sm-dn">desktop only</div>
<div class="dn sm-db">mobile only</div>

<!-- Hover button -->
<button class="bg6366F1 hover-bg4F46E5 cFFFFFF py12px px2rem br8px bn cp tall200msease">
  Click me
</button>

<!-- Absolute positioned overlay -->
<div class="pr">
  <div class="pa t0 l0 w100p h100p bg0-0-0-50 df jcc aic">overlay</div>
</div>

<!-- Text ellipsis (single line) -->
<p class="wsn oh toe">very long text that will be truncated...</p>

핵심부터 시작하세요

이 10개 클래스를 먼저 외우세요: df, dg, dn, jcc, aic, fdc, pr, pa, oh, cp. 거의 모든 컴포넌트에서 쓰게 됩니다.

MCP 도구로 검증하세요

확실하지 않을 때는 lookup_class로 클래스가 무엇을 출력하는지 확인하거나, search_by_css로 특정 CSS 속성에 맞는 클래스를 찾으세요.

규칙은 일관적입니다

예외는 거의 없습니다. 규칙 하나(첫 글자 조합)만 익히면 수천 개의 클래스를 유추할 수 있습니다. 이 시스템은 설계상 예측 가능합니다.

연습하면 빨라집니다

컴포넌트 몇 개만 만들어 보면 df jcc aic를 생각 없이 타이핑하게 됩니다. 대부분의 개발자는 하루 정도 실제로 써보면 익숙해집니다.