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