CSS Grid는 웹 레이아웃을 2차원(행+열)으로 구조화할 수 있는 강력한 레이아웃 시스템이다.
Flexbox가 주로 1차원(가로 혹은 세로 중 하나) 정렬에 특화되어 있다면,
Grid는 복잡한 레이아웃을 보다 직관적으로 구현할 수 있다.
.container {
display: grid;
}
grid를 사용하려면 먼저 부모 요소에 display: grid만 선언하면 된다.
.container {
display: grid;
grid-template-columns: 200px 1fr 200px;
grid-template-rows: 100px 200px;
}
.container {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 16px;
}
.item1 {
grid-column: 1 / 3; /* 1번 열부터 2번 열까지 차지 */
grid-row: 1 / 2;
}
.container {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
}
| 키워드 | 역할 |
|---|---|
auto-fill | 가능한 한 많은 칸을 채웁니다. |
auto-fit | 남는 공간을 늘려서 빈 칸을 없앱니다. |
minmax(min, max) | 최소/최대 크기를 조정합니다. |
👉 반응형 카드 레이아웃에 자주 쓰이는 패턴이다.
| 상황 | 추천 |
|---|---|
| 가로나 세로 한 줄 기준으로 배열 | ✅ Flex |
| 헤더/사이드바/본문/푸터 등 2차원 구조 | ✅ Grid |
| 섹션 간의 관계가 명확한 페이지 구조 | ✅ Grid |
| 아이템 간 정렬에 집중하는 경우 | ✅ Flex |
.container {
display: grid;
width: 900px;
height: 550px;
grid-template-columns: 200px 1fr;
grid-template-rows: 80px 1fr 100px;
grid-template-areas:
"header header"
"sidebar content"
"footer footer";
}
.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.content { grid-area: content; }
.footer { grid-area: footer; }

CSS Grid는 처음엔 규칙이 많아 보여도, 구조를 이해하면 반응형 레이아웃을 깔끔하게 설계할 수 있는 최고의 도구이다. 특히, 복잡한 2차원 레이아웃을 다룰 때는 Flex보다 훨씬 직관적이다.