반응형 디자인
Atomic CSS는 14개의 브레이크포인트 프리픽스를 제공합니다. 모든 클래스 앞에 프리픽스를 붙여 특정 화면 크기에서만 스타일을 적용할 수 있으며, max-width 기반의 모바일 퍼스트 접근 방식을 사용합니다.
구문
브레이크포인트 프리픽스와 기존 클래스를 하이픈으로 연결합니다.
{prefix}-{class}예를 들어 sm-dn은 다음과 같은 CSS를 생성합니다:
/* sm-dn */
@media (max-width: 768px) {
.sm-dn {
display: none;
}
}| 클래스 | 생성되는 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) } |
sm-p16px | @media (max-width: 768px) { padding: 16px } |
us-fs12px | @media (max-width: 420px) { font-size: 12px } |
브레이크포인트 목록
14개의 브레이크포인트가 제공됩니다. 모두 max-width 기반으로, 해당 너비 이하에서 스타일이 적용됩니다.
| 프리픽스 | Max-width | 이름 | 비고 |
|---|---|---|---|
us- | 420px | Ultra Small | |
es- | 640px | Extra Small | |
sm- | 768px | Small (Mobile) | ★ 가장 많이 사용 |
md- | 1024px | Medium (Tablet) | ★ 가장 많이 사용 |
rg- | 1080px | Regular | |
lg- | 1280px | Large | ★ 자주 사용 |
el- | 1440px | Extra Large | |
ul- | 1600px | Ultra Large | |
sl- | 1700px | Super Large | |
hl- | 1800px | Hyper Large | |
fh- | 1920px | Full HD | |
kk- | 2048px | 2K | |
uh- | 2160px | UHD | |
qh- | 2560px | QHD |
자주 쓰는 패턴
표시 / 숨김
데스크탑과 모바일에서 서로 다른 콘텐츠를 보여줄 때 가장 많이 사용하는 패턴입니다.
<!-- 데스크탑에서만 표시 (768px 이하에서 숨김) -->
<div class="db sm-dn">데스크탑 전용 콘텐츠</div>
<!-- 모바일에서만 표시 (768px 이하에서만 보임) -->
<div class="dn sm-db">모바일 전용 콘텐츠</div>
<!-- 태블릿 이하에서만 표시 -->
<div class="dn md-db">태블릿/모바일 전용</div>| 클래스 | 동작 |
|---|---|
db sm-dn | 기본 표시 → 768px 이하에서 숨김 (데스크탑 전용) |
dn sm-db | 기본 숨김 → 768px 이하에서만 표시 (모바일 전용) |
df md-dn | 기본 flex → 1024px 이하에서 숨김 |
dn md-df | 기본 숨김 → 1024px 이하에서만 flex 표시 |
레이아웃 전환
가로 배치에서 세로로, 또는 그리드 열 수를 줄이는 패턴입니다.
<!-- Flex 방향 전환: 가로 → 세로 -->
<div class="df md-fdc gap2rem">
<div>좌측 영역</div>
<div>우측 영역 → 태블릿 이하에서 아래로 이동</div>
</div>
<!-- Grid 열 수 축소: 3열 → 2열 → 1열 -->
<div class="dg gtcr3-1fr md-gtcr2-1fr sm-gtc1fr gap2rem">
<div>Card 1</div>
<div>Card 2</div>
<div>Card 3</div>
</div>반응형 폰트 크기
화면이 작아질수록 폰트 크기를 줄여 가독성을 유지합니다.
<!-- 제목: 데스크탑 24px → 태블릿 20px → 모바일 16px -->
<h1 class="fs2-4rem md-fs2rem sm-fs1-6rem fw800">반응형 제목</h1>
<!-- 본문: 데스크탑 16px → 모바일 14px -->
<p class="fs16px sm-fs14px lh1-7">본문 텍스트</p>반응형 간격
넓은 화면에서는 여유 있는 간격, 작은 화면에서는 좁은 간격을 적용합니다.
<!-- 패딩: 데스크탑 40px → 태블릿 20px → 모바일 16px -->
<div class="p4rem md-p2rem sm-p16px">
넓은 화면에서는 넉넉한 여백, 모바일에서는 최소 여백
</div>
<!-- Gap: 데스크탑 32px → 태블릿 20px → 모바일 12px -->
<div class="df fdc gap3-2rem md-gap2rem sm-gap12px">
<div>Item 1</div>
<div>Item 2</div>
</div>반응형 그리드
브레이크포인트마다 그리드 열 수를 조절하는 패턴입니다.
<!-- 4열 → 3열 → 2열 → 1열 -->
<div class="dg gtcr4-1fr lg-gtcr3-1fr md-gtcr2-1fr sm-gtc1fr gap2rem">
<div>Card 1</div>
<div>Card 2</div>
<div>Card 3</div>
<div>Card 4</div>
</div>작동 방식
Atomic CSS의 반응형은 max-width 미디어 쿼리를 사용합니다. 이는 데스크탑 퍼스트 방식입니다.
큰 화면 = 기본값 (프리픽스 없음)
프리픽스가 없는 클래스는 모든 화면 크기에서 적용됩니다. 이것이 데스크탑 기본 스타일입니다.
작은 화면 = 프리픽스로 오버라이드
프리픽스가 붙은 클래스는 해당 너비 이하에서만 기본값을 덮어씁니다. sm-dn은 768px 이하에서 dn으로 전환합니다.
작성 순서: 데스크탑 먼저, 모바일 오버라이드
먼저 데스크탑 스타일을 작성하고, 화면이 줄어들 때 변경할 부분만 프리픽스를 추가합니다.
<!-- 데스크탑 스타일을 먼저 쓰고, 작은 화면에서 변경할 부분만 추가 -->
<div class="dg gtcr3-1fr gap2rem md-gtcr2-1fr sm-gtc1fr sm-gap16px">
<!-- ↑ 데스크탑: 3열 ↑ 태블릿: 2열 ↑ 모바일: 1열 + 좁은 간격 -->
<div>Card 1</div>
<div>Card 2</div>
<div>Card 3</div>
</div>실전 예시
반응형 헤더
데스크탑에서는 로고 + 네비게이션, 모바일에서는 로고 + 햄버거 버튼으로 전환합니다.
<!-- 반응형 헤더 -->
<header class="df jcsb aic px2rem py16px">
<!-- 로고: 항상 표시 -->
<div class="fs2rem fw800 cFAFAFA">Logo</div>
<!-- 데스크탑 네비게이션: 모바일에서 숨김 -->
<nav class="df gap2rem sm-dn">
<a class="cA1A1AA hover-cFAFAFA tdn">Home</a>
<a class="cA1A1AA hover-cFAFAFA tdn">About</a>
<a class="cA1A1AA hover-cFAFAFA tdn">Contact</a>
</nav>
<!-- 햄버거 버튼: 모바일에서만 표시 -->
<button class="dn sm-db bg0000 bn cFAFAFA fs2rem cp">☰</button>
</header>반응형 카드 그리드
4열에서 2열, 1열로 점진적으로 축소되는 카드 레이아웃입니다.
<!-- 4열 → 2열 → 1열 카드 그리드 -->
<div class="dg gtcr4-1fr md-gtcr2-1fr sm-gtc1fr gap2rem md-gap16px">
<div class="bg18181B p2rem sm-p16px br8px">
<h3 class="fs16px fw700 cFAFAFA mb8px">카드 제목</h3>
<p class="fs14px c71717A lh1-7">카드 내용이 여기에 들어갑니다.</p>
</div>
<div class="bg18181B p2rem sm-p16px br8px">
<h3 class="fs16px fw700 cFAFAFA mb8px">카드 제목</h3>
<p class="fs14px c71717A lh1-7">카드 내용이 여기에 들어갑니다.</p>
</div>
<div class="bg18181B p2rem sm-p16px br8px">
<h3 class="fs16px fw700 cFAFAFA mb8px">카드 제목</h3>
<p class="fs14px c71717A lh1-7">카드 내용이 여기에 들어갑니다.</p>
</div>
<div class="bg18181B p2rem sm-p16px br8px">
<h3 class="fs16px fw700 cFAFAFA mb8px">카드 제목</h3>
<p class="fs14px c71717A lh1-7">카드 내용이 여기에 들어갑니다.</p>
</div>
</div>사이드바 레이아웃
데스크탑에서는 사이드바 + 메인 영역, 태블릿 이하에서는 세로 스택으로 전환합니다.
<!-- 사이드바 + 메인 → 세로 스택 -->
<div class="dg gtc25rem-1fr md-gtc1fr gap2rem">
<aside class="bg18181B p2rem br8px md-order2">
<h3 class="fs16px fw700 cFAFAFA mb16px">사이드바</h3>
<nav class="df fdc gap8px">
<a class="c71717A hover-cFAFAFA tdn">메뉴 1</a>
<a class="c71717A hover-cFAFAFA tdn">메뉴 2</a>
<a class="c71717A hover-cFAFAFA tdn">메뉴 3</a>
</nav>
</aside>
<main class="bg27272A p2rem br8px md-order1">
<h2 class="fs2rem fw700 cFAFAFA mb16px">메인 콘텐츠</h2>
<p class="fs14px c71717A lh1-7">여기에 메인 콘텐츠가 들어갑니다.</p>
</main>
</div>디바이스별 폰트 스케일링
제목, 본문, 캡션 등 텍스트 요소에 단계적 크기 조절을 적용합니다.
<!-- 히어로 제목 -->
<h1 class="fs4-8rem lg-fs4rem md-fs3-2rem sm-fs2-4rem fw800 lh1-2">
큰 제목이 여기에
</h1>
<!-- 섹션 제목 -->
<h2 class="fs3-2rem md-fs2-4rem sm-fs2rem fw700 lh1-3">
섹션 제목
</h2>
<!-- 부제목 -->
<h3 class="fs2rem md-fs1-8rem sm-fs1-6rem fw600 lh1-4">
부제목
</h3>
<!-- 본문 -->
<p class="fs16px sm-fs14px lh1-7">
본문 텍스트는 작은 변화만 줘도 충분합니다.
</p>브레이크포인트 중첩
하나의 요소에 여러 브레이크포인트를 동시에 적용할 수 있습니다. max-width 방식이므로, 화면이 줄어들 때 더 작은 브레이크포인트의 값이 순서대로 덮어씁니다.
<!-- 여러 브레이크포인트를 동시에 적용 -->
<div class="p4rem lg-p3-2rem md-p2-4rem sm-p16px">
화면 크기에 따라 padding이 단계적으로 줄어듭니다.
</div>위 예시에서 화면 크기별 적용되는 padding:
| 화면 너비 | 적용되는 값 | 이유 |
|---|---|---|
| 1440px 이상 | p4rem | 어떤 브레이크포인트에도 해당하지 않아 기본값 적용 |
| 1280px ~ 1439px | lg-p3-2rem | lg-(1280px) 조건에 해당 |
| 1024px ~ 1279px | md-p2-4rem | lg-와 md- 모두 해당하지만 md-가 나중에 선언되어 우선 |
| 768px ~ 1023px | sm-p16px | lg-, md-, sm- 모두 해당하지만 sm-이 최종 적용 |
| 768px 미만 | sm-p16px | sm- 조건을 만족하므로 sm-p16px 유지 |
캐스케이드 규칙
화면이 작아질수록 더 많은 max-width 조건에 해당하므로, 가장 작은 브레이크포인트의 값이 최종 적용됩니다. 768px 화면에서는 lg-, md-, sm- 모두 적용되지만 sm-이 가장 마지막에 오므로 최종 승자가 됩니다.
팁 & 주의사항
데스크탑 스타일을 먼저 작성하세요
max-width 방식이므로 기본 클래스가 데스크탑 스타일이 됩니다. 작은 화면에서 변경이 필요한 부분만 프리픽스를 추가하세요.
sm-과 md-만으로 90%를 커버할 수 있습니다
sm-(768px)과 md-(1024px) 두 개의 브레이크포인트만으로 대부분의 반응형 요구사항을 처리할 수 있습니다. 필요할 때만 다른 프리픽스를 추가하세요.
실제 디바이스에서 테스트하세요
브라우저 개발자 도구의 반응형 모드도 유용하지만, 터치 인터랙션과 실제 뷰포트 크기는 실물 디바이스에서만 정확하게 확인할 수 있습니다.
브레이크포인트를 남용하지 마세요
하나의 요소에 4개 이상의 브레이크포인트가 필요하다면, 레이아웃 구조를 다시 생각해 보세요. gtcrfit-minmax 같은 자동 반응형 그리드로 브레이크포인트 없이도 유연한 레이아웃을 만들 수 있습니다.