display
요소의 렌더링 방식을 결정하는 가장 기본적인 속성입니다. 레이아웃의 시작점이며, flex와 grid를 활성화하는 역할도 합니다.
클래스 목록
| 클래스 | CSS | 설명 |
|---|---|---|
df | display: flex | 플렉스 컨테이너. 자식을 가로 방향으로 배치 |
dif | display: inline-flex | 인라인 플렉스. 텍스트 흐름에 참여하면서 flex 동작 |
dg | display: grid | 그리드 컨테이너. 2차원 레이아웃 |
db | display: block | 블록 요소. 한 줄 전체를 차지 |
dib | display: inline-block | 인라인 블록. 텍스트처럼 흐르면서 width/height 적용 가능 |
di | display: inline | 인라인 요소. 텍스트처럼 흐름, width/height 무시 |
dn | display: none | 완전히 숨김. DOM에 존재하지만 공간을 차지하지 않음 |
dt | display: table | 테이블처럼 동작. 비-테이블 요소에 테이블 레이아웃 부여 |
dtc | display: table-cell | 테이블 셀처럼 동작. 동일 높이 컬럼에 활용 |
시각적 비교
각 display 값이 요소에 어떤 영향을 주는지 비교합니다.
Block — db
각 요소가 한 줄 전체를 차지합니다
Flex — df
자식 요소가 가로로 나란히 배치됩니다
Inline Block — dib
텍스트처럼 흐르면서 크기 제어 가능
Inline — di
width/height가 무시됩니다 (padding만 적용)
Grid (3열) — dg gtcr3-1fr
2차원 그리드로 배치됩니다
None (Item 2 숨김) — dn
Item 2가 숨겨지고 공간도 사라짐
dn vs vh — 숨김 방식 비교
dn(display: none)과 vh(visibility: hidden)은 모두 요소를 숨기지만, 공간 차지 여부가 다릅니다.
display: none — dn
공간 자체가 사라짐. Item 1과 3이 붙음
visibility: hidden — vh
공간은 유지됨. Item 2 자리가 비어 있음
| dn (display: none) | vh (visibility: hidden) | |
|---|---|---|
| 공간 차지 | 차지하지 않음 (완전히 제거) | 차지함 (빈 공간 유지) |
| 스크린리더 | 읽지 않음 | 읽지 않음 |
| 이벤트 수신 | 불가 | 불가 |
| 트랜지션 | 불가 (on/off 전환) | 가능 (opacity와 조합) |
| 자식 요소 | 모두 숨김 | 자식에 vv 부여 시 개별 표시 가능 |
| 주요 용도 | 반응형 숨김, 조건부 렌더링 | 레이아웃 유지하며 숨김 |
언제 뭘 쓸까?
| 상황 | 추천 | 이유 |
|---|---|---|
| 1차원 가로/세로 배치 | df | flex는 한 방향 정렬에 최적화 |
| 2차원 행/열 레이아웃 | dg | grid는 행과 열을 동시에 제어 |
| 태그, 뱃지 나열 | dib | 텍스트 흐름 + 크기 제어 |
| 전체 너비 섹션 | db | 기본 블록 흐름 |
| 반응형 숨김/표시 | dn / db | sm-dn, md-db 등 미디어 조합 |
| 동일 높이 컬럼 | dt + dtc | 테이블 셀의 자동 높이 맞춤 |
| 아이콘 + 텍스트 정렬 | dif | inline-flex로 텍스트 흐름 유지 |
클래스별 상세
dfdisplay: flex
자식 요소를 가로 방향으로 나란히 배치합니다. Atomic CSS에서 가장 많이 사용하는 레이아웃 클래스이며, jcc, aic, gap 등과 조합하여 사용합니다.
<!-- 가로 정렬 + 가운데 -->
<div class="df jcc aic gap16px">
<span>Logo</span>
<nav>Menu</nav>
<button>CTA</button>
</div>
<!-- 세로 정렬 (폼) -->
<div class="df fdc gap8px">
<input type="text" placeholder="이름" />
<input type="email" placeholder="이메일" />
<button>가입</button>
</div>
<!-- 양쪽 정렬 (헤더) -->
<header class="df jcsb aic px2rem py16px">
<div>Logo</div>
<nav class="df gap2rem">
<a href="#">Home</a>
<a href="#">About</a>
</nav>
</header>자주 쓰는 조합
df jcc aic | 가로 세로 모두 가운데 정렬 |
df jcsb aic | 양쪽 끝 정렬 (헤더, 네비게이션) |
df fdc gap8px | 세로 방향 + 간격 (폼, 목록) |
df fww gap16px | 줄바꿈 허용 (태그, 카드 목록) |
df aic gap8px | 세로 가운데 + 간격 (아이콘+텍스트) |
difdisplay: inline-flex
외부에서는 인라인 요소처럼 텍스트 흐름에 참여하면서, 내부 자식은 flex 규칙을 따릅니다. 아이콘 + 텍스트, 뱃지 등 인라인 요소 안에서 정렬이 필요할 때 사용합니다.
<!-- 아이콘 + 텍스트 뱃지 -->
<p>
상태:
<span class="dif aic gap4px bg34D399 c000000 py2px px8px br4px fs13px">
<svg width="12" height="12" viewBox="0 0 24 24" fill="currentColor">
<path d="M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z"/>
</svg>
활성
</span>
입니다.
</p>df vs dif 차이
dgdisplay: grid
2차원 그리드 레이아웃을 활성화합니다. 반드시 gtc(grid-template-columns)와 함께 사용합니다. 카드 목록, 대시보드, 갤러리 등에 적합합니다.
<!-- 3열 균등 카드 -->
<div class="dg gtcr3-1fr gap2rem">
<div class="bg18181B p2rem br8px">Card 1</div>
<div class="bg18181B p2rem br8px">Card 2</div>
<div class="bg18181B p2rem br8px">Card 3</div>
</div>
<!-- 반응형 auto-fit (화면에 맞게 자동 조절) -->
<div class="dg gtcrfit-minmax28rem-1fr gap2rem">
<div class="bg18181B p2rem br8px">자동 열 수</div>
<div class="bg18181B p2rem br8px">화면 크기에 반응</div>
<div class="bg18181B p2rem br8px">최소 28rem 보장</div>
</div>
<!-- 사이드바 + 메인 -->
<div class="dg gtc25rem-1fr gap2rem">
<aside class="bg18181B p2rem br8px">사이드바</aside>
<main class="bg27272A p2rem br8px">메인 콘텐츠</main>
</div>자주 쓰는 조합
dg gtcr3-1fr gap2rem | 3열 균등 그리드 |
dg gtcrfit-minmax28rem-1fr gap2rem | 반응형 auto-fit (자동 열 조절) |
dg gtc25rem-1fr gap2rem | 사이드바 + 메인 레이아웃 |
dg gtrauto-1fr-auto h100vh | 헤더-메인-푸터 전체 높이 |
dg pic | 가운데 정렬 (place-items: center) |
dbdisplay: block
한 줄 전체를 차지하는 블록 요소로 만듭니다. div, p 등은 기본값이 block이므로, 주로 인라인 요소를 블록으로 변환하거나 반응형에서 dn과 쌍으로 사용합니다.
<!-- 인라인 요소를 블록으로 -->
<span class="db w100p py12px bg18181B tac">전체 너비 배너</span>
<!-- 반응형 표시 전환 -->
<div class="db sm-dn">데스크탑에서만 표시</div>
<div class="dn sm-db">모바일에서만 표시</div>dibdisplay: inline-block
텍스트처럼 가로로 흐르면서 width, height, 상하 margin을 적용할 수 있습니다. 태그, 뱃지, 버튼 그룹 등에 활용합니다.
<!-- 태그 목록 -->
<div>
<span class="dib py4px px12px bg27272A cFAFAFA br4px mr8px mb8px fs14px">HTML</span>
<span class="dib py4px px12px bg27272A cFAFAFA br4px mr8px mb8px fs14px">CSS</span>
<span class="dib py4px px12px bg27272A cFAFAFA br4px mr8px mb8px fs14px">JavaScript</span>
<span class="dib py4px px12px bg27272A cFAFAFA br4px mr8px mb8px fs14px">TypeScript</span>
<span class="dib py4px px12px bg27272A cFAFAFA br4px mr8px mb8px fs14px">Vue</span>
</div>
<!-- 크기가 있는 인라인 요소 -->
<span class="dib w10rem h10rem bg6366F1 br8px"></span>
<span class="dib w8rem h8rem bg34D399 br8px ml8px"></span>didisplay: inline
텍스트 흐름에 완전히 참여합니다. width, height, 상하 margin이 무시됩니다. 블록 요소를 강제로 인라인으로 전환할 때 사용합니다.
<!-- 블록 요소를 인라인으로 -->
<div class="di">이 div는</div>
<div class="di">인라인으로</div>
<div class="di">흐릅니다</div>주의
di는 width, height, 상하 margin이 무시됩니다. 크기를 제어하려면 dib를 사용하세요.
dndisplay: none
요소를 완전히 숨깁니다. 공간을 차지하지 않으며 스크린리더에서도 읽히지 않습니다. 반응형 표시/숨김에 가장 많이 사용됩니다.
<!-- 반응형 숨김 -->
<div class="db sm-dn">768px 이하에서 숨김</div>
<div class="dn sm-db">768px 이하에서만 표시</div>
<!-- 조건부 표시 (JS와 조합) -->
<div :class="isOpen ? 'db' : 'dn'">
토글 콘텐츠
</div>접근성 주의
dn은 스크린리더에서도 완전히 숨겨집니다. 시각적으로만 숨기고 스크린리더에는 노출하려면 별도의 sr-only 패턴을 사용하세요.
dtdtcdisplay: table / table-cell
테이블이 아닌 요소에 테이블 동작을 부여합니다. 자식을 dtc로 지정하면 동일한 높이의 컬럼이 자동으로 만들어집니다.
<!-- 동일 높이 2컬럼 -->
<div class="dt w100p">
<div class="dtc p2rem bg18181B vat w50p">
짧은 내용
</div>
<div class="dtc p2rem bg27272A vat w50p">
긴 내용이 들어가도 양쪽 셀의 높이가
동일하게 유지됩니다.
테이블 셀의 자동 높이 맞춤 특성 덕분입니다.
</div>
</div>반응형 표시/숨김
미디어 쿼리 프리픽스와 조합하면 특정 화면에서만 요소를 표시하거나 숨길 수 있습니다.
<!-- 데스크탑에서만 표시 -->
<div class="db sm-dn">데스크탑 전용 콘텐츠</div>
<!-- 모바일에서만 표시 -->
<div class="dn sm-db">모바일 전용 콘텐츠</div>
<!-- 태블릿 이하에서 세로 전환 -->
<div class="df md-fdc gap16px">
<div>좌측</div>
<div>우측 → 태블릿 이하에서 아래로</div>
</div>| 클래스 조합 | 동작 |
|---|---|
db sm-dn | 기본 표시 → 768px 이하에서 숨김 |
dn sm-db | 기본 숨김 → 768px 이하에서만 표시 |
df md-dn | 기본 flex → 1024px 이하에서 숨김 |
dn md-df | 기본 숨김 → 1024px 이하에서만 flex 표시 |
dg lg-dn | 기본 grid → 1280px 이하에서 숨김 |
db es-dn | 기본 표시 → 640px 이하에서 숨김 |
의사 클래스 조합
hover, focus 등의 상태에서 display를 변경할 수 있습니다.
<!-- 호버 시 드롭다운 표시 -->
<div class="pr">
<button class="py8px px16px bg6366F1 cFFFFFF br8px bn cp">메뉴 열기</button>
<ul class="pa t100p l0 dn hover-db bg18181B b1pxsolid27272A br8px p16px mt4px lsn">
<li class="py4px">항목 1</li>
<li class="py4px">항목 2</li>
<li class="py4px">항목 3</li>
</ul>
</div>팁 & 주의사항
df vs dg 선택 기준
한 방향(가로 또는 세로)만 제어하면 df, 행과 열을 동시에 제어해야 하면 dg를 사용하세요.
inline-flex와 inline-block의 차이
dif는 외부에서는 인라인이지만 내부 자식은 flex 규칙을 따릅니다. dib는 단순히 인라인 흐름에 크기 제어만 추가합니다.
반응형 숨김 패턴
기본값을 설정하고 미디어 쿼리로 전환하세요. 예: db sm-dn은 "기본 표시, 768px 이하 숨김"입니다. 반대는 dn sm-db.