FLEXBOX
한 방향으로 정렬
가로 또는 세로 중 하나를 중심으로 아이템을 배치합니다.
1
2
3
Flexbox는 한 방향 배치에 강하고, Grid는 행과 열을 함께 다루는 레이아웃에 강합니다. 속성 설명과 실제 결과를 같은 화면에서 비교해 보세요.
어떤 속성이 더 좋은 것이 아니라, 레이아웃의 방향과 구조에 따라 선택합니다.
가로 또는 세로 중 하나를 중심으로 아이템을 배치합니다.
페이지, 카드 목록, 대시보드처럼 2차원 구조를 만들 때 적합합니다.
부모에게 적용하는 속성과 자식에게 적용하는 속성을 구분해서 기억하면 쉽습니다.
| 대상 | 속성 | 역할 | 자주 쓰는 값 |
|---|---|---|---|
| 부모 | display | Flex 레이아웃 시작 | flex, inline-flex |
| 부모 | flex-direction | 주축 방향 설정 | row, column |
| 부모 | justify-content | 주축 방향 정렬 | center, space-between |
| 부모 | align-items | 교차축 방향 정렬 | center, stretch |
| 부모 | flex-wrap | 줄바꿈 여부 | nowrap, wrap |
| 부모 | gap | 아이템 사이 간격 | 8px, 16px |
| 자식 | flex | 늘어남·줄어듦·기본 크기 | 1, 0 0 200px |
| 자식 | align-self | 특정 아이템만 별도 정렬 | center, flex-end |
| 자식 | order | 시각적 순서 변경 | 0, 1, -1 |
왼쪽 값을 변경하면 오른쪽 배치와 CSS 코드가 바로 바뀝니다.
.container {
display: flex;
flex-direction: row;
justify-content: flex-start;
align-items: stretch;
flex-wrap: nowrap;
gap: 12px;
}
Grid는 트랙을 정의하는 부모 속성과 셀의 위치를 결정하는 자식 속성이 핵심입니다.
| 대상 | 속성 | 역할 | 예시 |
|---|---|---|---|
| 부모 | display | Grid 레이아웃 시작 | grid |
| 부모 | grid-template-columns | 열 구조 정의 | repeat(3, 1fr) |
| 부모 | grid-template-rows | 행 구조 정의 | 100px auto |
| 부모 | gap | 행과 열 사이 간격 | 16px |
| 부모 | justify-items | 각 셀 내부 가로 정렬 | stretch, center |
| 부모 | align-items | 각 셀 내부 세로 정렬 | stretch, center |
| 부모 | grid-auto-flow | 자동 배치 방향 | row, column, dense |
| 자식 | grid-column | 열 시작·끝 또는 병합 | span 2, 1 / 3 |
| 자식 | grid-row | 행 시작·끝 또는 병합 | span 2 |
| 자식 | grid-area | 영역 이름 또는 위치 지정 | header |
열 개수와 간격을 조절하고, 특정 카드가 여러 칸을 차지하는 모습을 확인하세요.
.container {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 12px;
justify-items: stretch;
align-items: stretch;
}
.item-wide {
grid-column: span 2;
}
작은 내부 정렬은 Flex, 전체 화면 구조나 카드 배열은 Grid를 사용하는 경우가 많습니다.
로고와 메뉴를 양끝으로 배치하고 메뉴 내부도 Flex로 정렬합니다.
.header {
display: flex;
justify-content: space-between;
align-items: center;
}
열 비율을 정의하고 특정 카드를 전체 너비로 확장합니다.
.dashboard {
display: grid;
grid-template-columns: 1.2fr .8fr;
gap: 12px;
}
.chart {
grid-column: 1 / -1;
}
한 줄의 아이템을 정렬하거나 가운데 배치하려면 Flex, 행과 열을 함께 설계하거나 카드 위치를 명확하게 제어하려면 Grid를 먼저 생각합니다.