flex-direction
플렉스 아이템의 방향을 제어하는 속성입니다. 반드시 df(display: flex)와 함께 사용하며, 주축(main axis)의 방향을 결정합니다.
클래스 목록
| 클래스 | CSS | 설명 |
|---|---|---|
fdr | flex-direction: row | 기본값. 아이템을 왼쪽에서 오른쪽으로 배치 |
fdrr | flex-direction: row-reverse | 아이템을 오른쪽에서 왼쪽으로 배치 |
fdc | flex-direction: column | 아이템을 위에서 아래로 세로 배치 |
fdcr | flex-direction: column-reverse | 아이템을 아래에서 위로 역순 세로 배치 |
시각적 비교
각 flex-direction 값에 따라 아이템 1, 2, 3이 어떻게 배치되는지 비교합니다.
Row (좌 → 우) — df fdr
기본값. 아이템이 왼쪽에서 오른쪽으로 나란히 배치됩니다
Row Reverse (우 → 좌) — df fdrr
아이템이 오른쪽에서 왼쪽으로 역순 배치됩니다
Column (위 → 아래) — df fdc
아이템이 위에서 아래로 세로 방향으로 쌓입니다
Column Reverse (아래 → 위) — df fdcr
아이템이 아래에서 위로 역순으로 쌓입니다
언제 뭘 쓸까?
| 상황 | 추천 | 이유 |
|---|---|---|
| 수평 네비게이션, 헤더 | df fdr | 기본 가로 배치. 명시적 선언으로 의도 표현 |
| 모바일 세로 스택 | df fdc | 폼 필드, 카드 내부 등 세로 배치 |
| RTL 레이아웃, 역순 배치 | df fdrr | DOM 변경 없이 시각적 순서 뒤집기 |
| 역순 목록, 채팅 UI | df fdcr | 최신 항목이 아래에 위치하는 역순 스택 |
클래스별 상세
fdrflex-direction: row
기본값으로, 아이템을 왼쪽에서 오른쪽으로 배치합니다. 명시적으로 행 방향을 선언할 때 사용합니다. 헤더 네비게이션, 버튼 그룹 등 가로 배치가 필요한 대부분의 상황에서 사용합니다.
<!-- 헤더 네비게이션 -->
<header class="df fdr jcsb aic px2rem py16px">
<div>Logo</div>
<nav class="df fdr gap2rem">
<a href="#">Home</a>
<a href="#">About</a>
<a href="#">Contact</a>
</nav>
</header>
<!-- 버튼 그룹 -->
<div class="df fdr gap8px">
<button class="py8px px16px bg6366F1 cFFFFFF br8px bn cp">확인</button>
<button class="py8px px16px bg27272A cFFFFFF br8px bn cp">취소</button>
</div>자주 쓰는 조합
df fdr jcc aic | 가로 배치 + 가운데 정렬 |
df fdr jcsb aic | 양쪽 끝 배치 (헤더, 네비게이션) |
df fdr fww gap16px | 줄바꿈 허용 가로 배치 (태그 목록) |
df fdr gap8px aic | 가로 배치 + 간격 + 세로 가운데 |
fdrrflex-direction: row-reverse
아이템을 오른쪽에서 왼쪽으로 배치합니다. DOM 순서를 변경하지 않고 시각적 순서만 뒤집을 때 사용합니다. RTL(우에서 좌) 레이아웃이나 역순 배치가 필요한 경우에 유용합니다.
<!-- 역순 버튼 배치 (확인 버튼을 오른쪽에) -->
<div class="df fdrr gap8px">
<button class="py8px px16px bg6366F1 cFFFFFF br8px bn cp">확인</button>
<button class="py8px px16px bg27272A cFFFFFF br8px bn cp">취소</button>
</div>
<!-- RTL 스타일 레이아웃 -->
<div class="df fdrr gap2rem p2rem">
<aside class="bg18181B p2rem br8px">사이드바 (오른쪽)</aside>
<main class="fg1 bg27272A p2rem br8px">메인 콘텐츠</main>
</div>접근성 주의
fdrr은 시각적 순서만 변경하며, DOM 순서와 탭 순서는 그대로 유지됩니다. 스크린리더와 키보드 탐색은 DOM 순서를 따르므로, 시각적 순서와 논리적 순서가 다르면 혼란을 줄 수 있습니다.
fdcflex-direction: column
아이템을 위에서 아래로 세로 방향으로 쌓습니다. fdr 다음으로 가장 많이 사용되는 방향입니다. 폼 필드, 카드 내부, 리스트 등 세로 배치가 필요한 곳에서 사용합니다.
<!-- 폼 필드 세로 배치 -->
<form class="df fdc gap12px">
<input type="text" placeholder="이름" />
<input type="email" placeholder="이메일" />
<textarea placeholder="메시지"></textarea>
<button class="py8px px16px bg6366F1 cFFFFFF br8px bn cp">전송</button>
</form>
<!-- 카드 내부 구조 -->
<div class="df fdc gap16px p2rem bg18181B br8px">
<h3>카드 제목</h3>
<p>카드 설명 텍스트가 들어갑니다.</p>
<button class="py8px px16px bg6366F1 cFFFFFF br8px bn cp">자세히</button>
</div>자주 쓰는 조합
df fdc gap8px | 세로 배치 + 간격 (폼, 목록) |
df fdc jcc aic h100vh | 전체 화면 가운데 정렬 |
df fdc jcsb h100p | 세로 양쪽 끝 배치 (상단+하단 고정) |
df fdc fg1 | 남은 공간을 세로로 채우는 영역 |
fdcrflex-direction: column-reverse
아이템을 아래에서 위로 배치합니다. 채팅 메시지처럼 최신 항목이 아래에 위치하면서 스크롤은 위로 확장되는 UI나, 역순 목록에 활용합니다.
<!-- 채팅 메시지 (최신이 아래에) -->
<div class="df fdcr gap8px maxh30rem oya p16px">
<div class="bg18181B p12px br8px fs14px cA1A1AA">첫 번째 메시지</div>
<div class="bg18181B p12px br8px fs14px cA1A1AA">두 번째 메시지</div>
<div class="bg6366F1 p12px br8px fs14px cFFFFFF">최신 메시지 (화면 하단)</div>
</div>
<!-- 역순 알림 목록 -->
<div class="df fdcr gap4px">
<p class="fs14px c71717A">오래된 알림</p>
<p class="fs14px c71717A">중간 알림</p>
<p class="fs14px cFAFAFA fw600">최신 알림</p>
</div>접근성 주의
fdcr도 fdrr과 마찬가지로 시각적 순서만 역전되며, DOM 순서와 탭 순서는 변하지 않습니다.
반응형 패턴
미디어 쿼리 프리픽스와 조합하면 화면 크기에 따라 방향을 전환할 수 있습니다.
<!-- 데스크탑 가로 → 태블릿 세로 -->
<div class="df fdr md-fdc gap2rem">
<div class="fg1 bg18181B p2rem br8px">사이드바</div>
<div class="fg1 bg27272A p2rem br8px">메인 콘텐츠</div>
</div>
<!-- 모바일 세로 → 데스크탑 가로 -->
<div class="df fdc sm-fdr gap16px">
<button class="py8px px16px bg6366F1 cFFFFFF br8px bn cp">버튼 1</button>
<button class="py8px px16px bg27272A cFFFFFF br8px bn cp">버튼 2</button>
<button class="py8px px16px bg27272A cFFFFFF br8px bn cp">버튼 3</button>
</div>| 클래스 조합 | 동작 |
|---|---|
df fdr md-fdc | 기본 가로 → 1024px 이하에서 세로 전환 |
df fdc sm-fdr | 기본 세로 → 768px 이하에서 가로 전환 |
df fdr sm-fdc gap16px | 기본 가로 → 768px 이하에서 세로 + 간격 유지 |
df fdc md-fdr lg-fdrr | 기본 세로 → 태블릿 가로 → 데스크탑 역순 가로 |
팁 & 주의사항
fdc는 주축을 변경합니다
fdc를 사용하면 주축이 세로가 됩니다. 따라서 jcc(justify-content: center)가 세로 가운데 정렬이 되고, aic(align-items: center)가 가로 가운데 정렬이 됩니다.
gap과 함께 사용하세요
flex-direction과 gap을 함께 사용하면 아이템 사이에 일정한 간격을 쉽게 줄 수 있습니다. 예: df fdc gap16px
reverse는 시각적 순서만 변경합니다
fdrr과 fdcr은 DOM 순서와 탭 순서를 변경하지 않습니다. 스크린리더와 키보드 내비게이션은 여전히 원래 DOM 순서를 따르므로, 접근성에 주의가 필요합니다.