order
플렉스/그리드 아이템의 시각적 순서를 DOM 순서와 다르게 변경합니다. HTML 구조를 바꾸지 않고도 요소의 배치 순서를 제어할 수 있습니다.
클래스 목록
| 클래스 | CSS | 설명 |
|---|---|---|
order1 | order: 1 | 기본 순서(0)보다 뒤로 배치 |
order2 | order: 2 | order1보다 뒤에 배치 |
order3 | order: 3 | order2보다 뒤에 배치 |
neg-order1 | order: -1 | 기본 순서보다 앞으로 배치 |
시각적 비교
order 값에 따라 아이템의 시각적 배치가 어떻게 변하는지 비교합니다.
기본 순서 (order 없음) — DOM 순서대로 배치
모든 아이템의 기본 order는 0이므로 DOM 순서대로 표시됩니다
order 값으로 순서 변경 — A를 마지막으로
시각적 순서: B → C → A. DOM 순서는 변하지 않음
neg-order1로 맨 앞으로 이동
Item C가 order: -1로 다른 아이템(order: 0)보다 앞에 배치됩니다
접근성 주의사항
시각적 순서 ≠ DOM 순서 ≠ 탭 순서
order는 시각적 배치만 변경합니다. 키보드 탭 순서와 스크린리더 읽기 순서는 여전히 DOM 순서를 따릅니다.
시각적 순서와 탭 순서가 다르면 키보드 사용자에게 혼란을 줄 수 있습니다. 가능하면 DOM 순서 자체를 변경하는 것이 좋습니다.
| 구분 | 순서 기준 | order 영향 |
|---|---|---|
| 시각적 배치 | order 값 | 영향 받음 |
| 키보드 탭 순서 | DOM 순서 | 영향 없음 |
| 스크린리더 읽기 순서 | DOM 순서 | 영향 없음 |
| JavaScript DOM API | DOM 순서 | 영향 없음 |
클래스별 상세
order1order: 1
기본 order(0)보다 뒤로 배치됩니다. 특정 아이템을 뒤로 밀 때 사용합니다.
<!-- 특정 아이템을 뒤로 -->
<div class="df gap8px">
<span class="order1">Item A (뒤로)</span>
<span>Item B (기본 order: 0)</span>
<span>Item C (기본 order: 0)</span>
</div>
<!-- 결과: B → C → A -->order2order: 2
order1보다 더 뒤에 배치됩니다. 여러 단계의 순서 제어가 필요할 때 사용합니다.
<!-- 다단계 순서 제어 -->
<div class="df gap8px">
<span class="order2">Item A (2순위)</span>
<span class="order1">Item B (1순위)</span>
<span>Item C (기본 0)</span>
</div>
<!-- 결과: C → B → A -->order3order: 3
3단계 뒤로 배치됩니다. 복잡한 순서 재배치가 필요할 때 사용합니다.
<!-- 3단계 순서 -->
<div class="df gap8px">
<span class="order3">Item A (3순위)</span>
<span class="order1">Item B (1순위)</span>
<span class="order2">Item C (2순위)</span>
</div>
<!-- 결과: B → C → A (원래 순서가 역전됨) -->neg-order1order: -1
다른 모든 아이템(기본 order: 0)보다 앞에 배치됩니다. 특정 아이템을 맨 앞으로 끌어올릴 때 가장 유용합니다.
<!-- 맨 앞으로 끌어올리기 -->
<div class="df gap8px">
<span>Item A</span>
<span>Item B</span>
<span class="neg-order1">Item C (맨 앞으로!)</span>
</div>
<!-- 결과: C → A → B -->
<!-- 반응형: 모바일에서 메인 콘텐츠 먼저 -->
<div class="df fdc">
<aside>사이드바</aside>
<main class="sm-neg-order1">메인 (모바일에서 먼저)</main>
</div>반응형 순서 변경
미디어 쿼리 프리픽스와 조합하면 화면 크기에 따라 순서를 변경할 수 있습니다.
<!-- 데스크탑: A-B-C / 모바일: C-A-B -->
<div class="df fdc sm-fdc gap16px">
<div>Item A</div>
<div>Item B</div>
<div class="sm-neg-order1">Item C (모바일에서 맨 위)</div>
</div>
<!-- 사이드바: 데스크탑은 왼쪽, 모바일은 아래 -->
<div class="df sm-fdc gap2rem">
<aside class="fs0 w25rem sm-order1">사이드바</aside>
<main class="fg1">메인 콘텐츠</main>
</div>| 클래스 조합 | 동작 |
|---|---|
sm-order1 | 768px 이하에서 뒤로 배치 |
sm-neg-order1 | 768px 이하에서 맨 앞으로 |
md-order2 | 1024px 이하에서 두 번째 뒤로 |
order1 sm-order3 | 기본 1순위 → 모바일에서 3순위 |
팁 & 주의사항
꼭 필요할 때만 사용하세요
order를 남용하면 시각적 순서와 DOM 순서의 불일치로 접근성 문제가 생깁니다. 가능하면 HTML 자체의 순서를 변경하는 것이 우선입니다.
neg-order1은 "맨 앞으로" 패턴
neg-order1은 order: -1로, 기본값(0)인 다른 아이템들보다 항상 앞에 옵니다. 반응형에서 특정 요소를 모바일에서 먼저 보여줄 때 유용합니다.
flex와 grid 모두에서 동작
order는 df(flex)와 dg(grid) 컨테이너 안에서 모두 동작합니다. 일반 블록 요소에는 효과가 없습니다.
반응형 레이아웃 재배치에 적합
데스크탑에서는 사이드바가 왼쪽, 모바일에서는 메인 콘텐츠가 먼저 오도록 sm-neg-order1 등으로 순서를 바꿀 수 있습니다.