많이 사용하는 레이아웃, Flexbox
Flexbox는 1차원 레이아웃 을 다루는 CSS 레이아웃 방식이다.
display: flex를 선언한 요소가 flex 컨테이너가 되고, 그 안의 자식 요소들이 flex 아이템이 된다.
기본 축 개념
flex-direction: row(기본값)일 때 주축은 가로, 교차축은 세로이다.
flex-direction: column일 때 주축은 세로, 교차축은 가로이다.
주축(main axis) → flex-direction으로 방향 결정
교차축(cross axis) → 주축에 수직인 축
컨테이너 속성
flex 컨테이너에 적용하는 속성이다.
① display: flex
Flexbox를 시작하는 선언이다.
.container {
display: flex;
}② flex-direction
주축의 방향을 결정한다.
.container {
flex-direction: row; /* 기본값 — 가로 방향 */
flex-direction: row-reverse; /* 가로 역방향 */
flex-direction: column; /* 세로 방향 */
flex-direction: column-reverse; /* 세로 역방향 */
}③ justify-content
주축 방향으로 아이템을 정렬한다.
.container {
justify-content: flex-start; /* 기본값 — 시작점 정렬 */
justify-content: flex-end; /* 끝점 정렬 */
justify-content: center; /* 가운데 정렬 */
justify-content: space-between; /* 양 끝 배치, 사이 균등 간격 */
justify-content: space-around; /* 각 아이템 양쪽 균등 간격 */
justify-content: space-evenly; /* 모든 간격 균등 */
}④ align-items
교차축 방향으로 아이템을 정렬한다.
.container {
align-items: stretch; /* 기본값 — 교차축 방향으로 늘어남 */
align-items: flex-start; /* 교차축 시작점 정렬 */
align-items: flex-end; /* 교차축 끝점 정렬 */
align-items: center; /* 교차축 가운데 정렬 */
}⑤ flex-wrap
아이템이 컨테이너를 넘칠 때 줄바꿈 여부를 결정한다.
.container {
flex-wrap: nowrap; /* 기본값 — 줄바꿈 없이 한 줄 */
flex-wrap: wrap; /* 넘치면 다음 줄로 */
}⑥ gap
아이템 사이의 간격을 지정한다.
.container {
gap: 16px; /* 행·열 간격 동일 */
gap: 8px 16px; /* 행 간격 8px, 열 간격 16px */
}아이템 속성
flex 아이템에 적용하는 속성이다.
① flex-grow
남은 공간을 아이템이 얼마나 차지할지 비율로 지정한다. 기본값은 0이다.
.item-a { flex-grow: 1; } /* 남은 공간의 1/3 */
.item-b { flex-grow: 2; } /* 남은 공간의 2/3 */② flex-shrink
컨테이너가 좁아질 때 아이템이 얼마나 줄어들지 비율로 지정한다. 기본값은 1이다.
.item {
flex-shrink: 0; /* 줄어들지 않음 */
flex-shrink: 1; /* 기본값 — 비율에 따라 줄어듦 */
}③ flex-basis
아이템의 기본 크기를 지정한다. width와 유사하지만 주축 방향으로 적용된다.
.item {
flex-basis: 200px; /* 기본 너비 200px */
flex-basis: auto; /* 기본값 — 콘텐츠 크기 */
}④ flex 단축 속성
flex-grow, flex-shrink, flex-basis를 한 번에 작성한다.
.item {
flex: 1; /* flex-grow: 1, flex-shrink: 1, flex-basis: 0 */
flex: 1 0 auto; /* grow shrink basis 순서 */
}⑤ align-self
개별 아이템의 교차축 정렬을 지정한다. align-items를 덮어쓴다.
.item {
align-self: flex-start;
align-self: center;
align-self: flex-end;
}⑥ order
아이템의 시각적 순서를 변경한다. 기본값은 0이며, 값이 작을수록 앞에 배치된다.
.item-a { order: 2; }
.item-b { order: 1; } /* item-a보다 앞에 표시 */자주 쓰는 패턴
수평·수직 가운데 정렬
.container {
display: flex;
justify-content: center;
align-items: center;
}양쪽 끝 정렬 (헤더 레이아웃)
.header {
display: flex;
justify-content: space-between;
align-items: center;
}균등 분할
.container {
display: flex;
}
.item {
flex: 1; /* 모든 아이템이 동일한 너비를 가진다 */
}정리
| 분류 | 속성 | 설명 |
|---|---|---|
| 컨테이너 | display: flex | Flexbox 시작 |
| 컨테이너 | flex-direction | 주축 방향 |
| 컨테이너 | justify-content | 주축 정렬 |
| 컨테이너 | align-items | 교차축 정렬 |
| 컨테이너 | flex-wrap | 줄바꿈 여부 |
| 컨테이너 | gap | 아이템 간격 |
| 아이템 | flex-grow | 남은 공간 비율 |
| 아이템 | flex-shrink | 줄어드는 비율 |
| 아이템 | flex-basis | 기본 크기 |
| 아이템 | flex | grow shrink basis 단축 |
| 아이템 | align-self | 개별 교차축 정렬 |
| 아이템 | order | 시각적 순서 |
마지막 수정