정의 및 사용 방법
flex-direction 속성은 플렉스 컨테이너의 주 축(main axis)의 방향을 설정하여,
플렉스 아이템이 플렉스 컨테이너 내에 배치되는 흐름 방향을 지정합니다.
특징
기본 예제
<div class="flex-container">
<div class="item">Item-1</div>
<div class="item">Item-2</div>
<div class="item">Item-3</div>
</div>
.flex-container {
display: flex; /* 플렉스 컨테이너 생성 */
padding: 10px;
border: 2px solid silver;
flex-direction: /* value <= 라이브 데모에서 동적으로 구현 */
}
.item { /* 플렉스 아이템 */
border: 4px solid blue;
background-color: yellow;
}
/*
* 일부 스타일 코드는 가독성을 위해 생략했습니다!
*/
형식 구문
selector {
flex-direction: row | row-reverse | column | column-reverse
}
구문
/* 키워드 값 */
flex-direction: row;
flex-direction: row-reverse;
flex-direction: column;
flex-direction: column-reverse;
/* 글로벌 값 */
flex-direction: inherit;
flex-direction: initial;
flex-direction: revert;
flex-direction: revert-layer;
flex-direction: unset;
값
row |
초깃값임.
플렉스 컨테이너의 주 축은 텍스트 줄(line box)이 배치되는 방향과 동일합니다.
|
|---|---|
row-reverse |
주 축은 row와 동일하지만, 플렉스 아이템의 배치 방향이 반대로 설정됩니다.
|
column |
플렉스 컨테이너의 주 축은 텍스트 줄(line box) 방향과 교차되는 방향과 동일합니다.
|
column-reverse |
주 축은 column과 동일하지만, 플렉스 아이템의 배치 방향이 반대로 설정됩니다.
|
'세로 쓰기 모드'와 flex-direction
writing-mode가 세로 쓰기 모드일 경우, flex-direction 속성의 방향이 어떻게 달라지는지 라이브 데모로 확인해보세요.
<div class="flex-container">
<div class="item">Item-1</div>
<div class="item">Item-2</div>
<div class="item">Item-3</div>
</div>
.flex-container {
display: flex; /* 플렉스 컨테이너 생성 */
padding: 10px;
border: 2px solid silver;
writing-mode: vertical-lr; /* 세로 쓰기 모드 설정 */
flex-direction: /* value <= 라이브 데모에서 동적으로 구현 */
}
.item { /* 플렉스 아이템 */
border: 4px solid blue;
background-color: yellow;
}
/*
* 일부 스타일 코드는 가독성을 위해 생략했습니다!
*/
형식 정의
| 초깃값 | row |
|---|---|
| 적용 요소 | 플렉스 컨테이너 |
| 상속 | 아니오 |
| 애니메이션 | 아니오 |
접근성 고려 사항
flex-direction 속성을 사용하면 플렉스 아이템이 플렉스 컨테이너 내에 배치되는 흐름 방향을 유연하고 다양하게 구현할 수 있습니다.
이러한 구현은 시각적 측면에서 매우 유용하게 사용될 수 있지만, 저시력으로 인해 스크린 리더나 접근성 보조 기술을 사용하는 사용자에게는 실제 HTML의 구조와 시각적 순서 상의 차이로 인해 부정적인 영향을 줄 수 있습니다.
# tab 포커스 탐색 제어
특히, 사용자는 웹 페이지에서 사용자가 키보드의 탭(Tab) 키를 눌러 웹 페이지의 포커스가 가능한 요소에 포커스를 맞춰 탐색할 수 있는데 포커스되는 요소의 순서가 시각적 순서와 다른 경우에는 사용자 경험을 방해할 수 있습니다.
예를 들면, 다음과 같은 경우입니다.
<div class="flex-container">
<a href="" class="item">Item-1</a>
<a href="" class="item">Item-2</a>
<a href="" class="item">Item-3</a>
</div>
.flex-container {
display: flex;
flex-direction: reverse; /* 마크업 순서와 시각적 배치 순서가 반대입니다. */
}
이런 경우, HTML의 tabindex 속성을 사용하여, tab 포커스 탐색 순서를 실제 HTML의 구조 순서가 아닌 시각적 순서로 재설정 할 수 있습니다.
<div class="flex-container">
<a href="" class="item" tabindex="3">Item-1</a>
<a href="" class="item" tabindex="2">Item-2</a>
<a href="" class="item" tabindex="1">Item-3</a>
</div>
이렇게 하면 시각적 순서와 키보드 순서가 모두 Item-3, Item-2, Item-1이 됩니다.
활용 예제
flex-direction 속성은 화면의 폭이 넓은 데스크톱에서는 아이템을 가로로 배치하고, 폭이 좁은 모바일에서는 세로로 배치하는 반응형 웹 디자인을 구현할 때 매우 쉽고 유용합니다.
다음은 반응형 웹 디자인에 적용한 flex-direction 속성의 사용 예제입니다.
<div class="flex-container">
<div class="item">1번 아이템</div>
<div class="item">2번 아이템</div>
<div class="item">3번 아이템</div>
</div>
.flex-container {
display: flex; /* 플렉스 컨테이너 생성 */
gap: 10px; /* 플렉스 아이템 간격 설정 */
padding: 10px;
border: 2px solid #333;
flex-direction: row; /* 데스크톱 디자인에 적용 */
}
.item {
background-color: #4CAF50;
color: white;
padding: 15px;
flex: 1; /* 플렉스 아이템들이 가로로 꽉 차게 설정 */
text-align: center;
}
@media (max-width: 750px) {
.flex-container {
flex-direction: column; /* 모바일 디자인에 적용 */
}
}
브라우저 호환성
| 속성 |
데스크탑 Chrome
|
데스크탑 Edge
|
데스크탑 Firefox
|
Safari
|
|---|---|---|---|---|
flex-direction
|
29 | 12 | 22 | 9 |
명세서
| 명세서 사양 | |
|---|---|
flex-direction
|
CSS Flexible Box Layout Module Level 1 #flex-direction-property |