반응형 디자인

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-420pxUltra Small
es-640pxExtra Small
sm-768pxSmall (Mobile)★ 가장 많이 사용
md-1024pxMedium (Tablet)★ 가장 많이 사용
rg-1080pxRegular
lg-1280pxLarge★ 자주 사용
el-1440pxExtra Large
ul-1600pxUltra Large
sl-1700pxSuper Large
hl-1800pxHyper Large
fh-1920pxFull HD
kk-2048px2K
uh-2160pxUHD
qh-2560pxQHD

자주 쓰는 패턴

표시 / 숨김

데스크탑과 모바일에서 서로 다른 콘텐츠를 보여줄 때 가장 많이 사용하는 패턴입니다.

<!-- 데스크탑에서만 표시 (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 ~ 1439pxlg-p3-2remlg-(1280px) 조건에 해당
1024px ~ 1279pxmd-p2-4remlg-와 md- 모두 해당하지만 md-가 나중에 선언되어 우선
768px ~ 1023pxsm-p16pxlg-, md-, sm- 모두 해당하지만 sm-이 최종 적용
768px 미만sm-p16pxsm- 조건을 만족하므로 sm-p16px 유지

캐스케이드 규칙

화면이 작아질수록 더 많은 max-width 조건에 해당하므로, 가장 작은 브레이크포인트의 값이 최종 적용됩니다. 768px 화면에서는 lg-, md-, sm- 모두 적용되지만 sm-이 가장 마지막에 오므로 최종 승자가 됩니다.

팁 & 주의사항

데스크탑 스타일을 먼저 작성하세요

max-width 방식이므로 기본 클래스가 데스크탑 스타일이 됩니다. 작은 화면에서 변경이 필요한 부분만 프리픽스를 추가하세요.

sm-과 md-만으로 90%를 커버할 수 있습니다

sm-(768px)과 md-(1024px) 두 개의 브레이크포인트만으로 대부분의 반응형 요구사항을 처리할 수 있습니다. 필요할 때만 다른 프리픽스를 추가하세요.

실제 디바이스에서 테스트하세요

브라우저 개발자 도구의 반응형 모드도 유용하지만, 터치 인터랙션과 실제 뷰포트 크기는 실물 디바이스에서만 정확하게 확인할 수 있습니다.

브레이크포인트를 남용하지 마세요

하나의 요소에 4개 이상의 브레이크포인트가 필요하다면, 레이아웃 구조를 다시 생각해 보세요. gtcrfit-minmax 같은 자동 반응형 그리드로 브레이크포인트 없이도 유연한 레이아웃을 만들 수 있습니다.