Flex와 Grid의 차이점에 대해서 설명해주세요.
Last updated
Last updated
Flex와 Grid는 각각 다른 레이아웃 목적에 최적화된 CSS 도구입니다.
Flex는 1차원 레이아웃으로 한 축(가로 또는 세로)만 제어 가능하며 주로 수평 방향으로 레이아웃을 정렬합니다. Grid는 2차원 레이아웃으로 행(row)과 열(column)을 동시에 제어합니다. Flex는 콘텐츠 중심으로 유동적인 아이템 정렬(justify-content
, align-items
)에 적합합니다. 반면에, Grid는 레이아웃 중심으로 아이템크기를 미리 정의하고 셀의 크기를 일정하게 유지합니다. 즉, 고정된 구조 설계(grid-template-rows
, columns
)에 적합합니다. Flex는 네비게이션 바나 버튼 그룹처럼 단순 정렬이 필요할 때 유리하며, Grid는 대시보드나 카드형 UI처럼 정교한 2차원 배치가 필요한 경우 적합합니다.
한 방향 레이아웃 시스템
아이템 배치: 가로(row) 또는 세로(column) 방향으로 배치
아이템 배치: 일차원적 배치
x,y 동시에 제어하지 못함: 둘 중 하나를 주축으로 요소 배치
메인축을 바탕으로 정렬되게됨!
주요 개념
display: flex;
: 부모 컨테이너를 Flexbox로 선언
기본 속성: row (가로 방향)
가로 선상: justify-content
→ 아이템의 가로 정렬
세로 선상: align-items
→ 아이템의 세로 정렬
flex-direction
: 정렬할 방향 지정
row
(기본값): 왼→오 가로 방향
column
: 위→아래 세로 방향
row-reverse
/ column-reverse
: 반대 방향 정렬
가로 축 정렬: justify-content
flex-start
: 왼쪽 정렬 (기본값)
flex-end
: 오른쪽 정렬
center
: 가운데 정렬
space-between
: 요소 간 균등한 간격 배치
space-around
: 양쪽 여백 포함하여 간격 배치
세로 축 정렬: align-items
stretch
: 컨테이너 크기에 맞게 늘림 (기본값)
flex-start
: 위쪽 정렬
flex-end
: 아래쪽 정렬
center
: 세로 가운데 정렬
baseline
: 텍스트 기준 정렬
두 방향레이아웃 시스템
두 방향 레이아웃 시스템 (가로, 세로)
아이템 배치: 이차원적 배치
display: grid;
: 부모 컨테이너를 Grid로 선언
Grid Template 설정
grid-template-columns
/ grid-template-rows
: 열과 행의 개수 및 크기 설정
gap
: 셀 사이 간격 설정
반응형 크기 설정
repeat()
: 반복적인 크기 설정
minmax()
: 최소/최대 크기 지정 가능
셀 크기 비율 지정
2번에서 4번까지 영역을 하나로 하고싶다면?
항목
Flexbox
Grid
레이아웃 방식
1차원 (가로 or 세로)
2차원 (가로 + 세로)
적합한 경우
단순한 콘텐츠 배치, 유연한 아이템 정렬
정교한 레이아웃 설계, 행/열 배치
정렬 기준
주축을 기준으로 아이템 정렬
전체 그리드를 템플릿으로 제어
Flexbox를 사용하는 경우
메뉴, 버튼 정렬처럼 단순한 한 줄 정렬이 필요할 때
아이템 간의 유연한 공간 분배가 중요할 때
Grid를 사용하는 경우
전체 페이지 레이아웃이나 복잡한 레이아웃을 설계할 때
정확히 행/열 기준으로 아이템을 배치해야 할 때