⊞ CSS 레이아웃 · 2차원 그리드

CSS Grid 레이아웃
완전 정복 가이드

행(row)과 열(column)을 동시에 제어하는 2차원 레이아웃 시스템 CSS Grid.
카드 그리드부터 전체 페이지 레이아웃까지, 인터랙티브 데모로 바로 익혀봐요.

⏱️ 약 15분 📅 2026년 4월 🏷️ CSS · 레이아웃 👶 입문 난이도
① 개념

CSS Grid란 무엇인가요?

행(row)과 열(column)을 동시에 다루는 웹의 2차원 레이아웃 시스템

웹 페이지를 만들다 보면 단순히 가로로 나열하는 것 이상이 필요할 때가 있어요. 헤더, 사이드바, 본문, 푸터가 격자처럼 맞물려야 하거나, 카드들이 깔끔하게 여러 열로 나뉘어야 하거나, 특정 요소가 여러 칸을 차지해야 하는 경우가 그래요. CSS Grid는 이런 2차원 레이아웃을 가장 명확하고 직관적으로 만들 수 있는 CSS 시스템이에요.

Grid는 부모(Container)display: grid를 선언하면 활성화돼요. 그러면 자식 요소(Item)들이 자동으로 격자 형태로 배치되고, grid-template-columnsgrid-template-rows로 각 칸의 크기를 자유롭게 지정할 수 있어요. 나아가 grid-template-areas를 사용하면 이름만으로 복잡한 레이아웃도 한눈에 그릴 수 있어요.

CSS Grid는 2017년 주요 브라우저에 정식 지원되기 시작했고, 지금은 전 세계 브라우저의 98% 이상에서 완벽하게 동작해요. float, table, 절대 위치 지정 없이도 복잡한 레이아웃을 단 몇 줄로 구현할 수 있는 시대가 된 거예요.

Flexbox — 1차원 (가로 OR 세로)
A
B
C
D
한 방향(가로 또는 세로)으로만 아이템을 정렬해요. 버튼 그룹, 네비게이션, 카드 한 줄 나열에 최적이에요.
CSS Grid — 2차원 (가로 AND 세로)
A (span 2)
B
C
D
E
행과 열을 동시에 제어해요. 요소가 여러 칸을 차지하거나, 정해진 위치에 배치돼야 할 때 최적이에요.

전체 페이지 레이아웃

헤더, 사이드바, 본문, 푸터가 모두 격자로 맞물리는 구조. Grid의 가장 강력한 활용처예요.

🃏

카드 그리드

상품 목록, 블로그 포스트 등을 여러 열로 나열. auto-fill로 반응형까지 한 번에 해결해요.

📰

잡지형 레이아웃

특정 카드가 2열을 차지하거나 2행을 차지하는 비대칭 레이아웃. grid-column: span 2로 쉽게 구현해요.

📊

대시보드 / 위젯

크기가 제각각인 위젯들을 격자 안에 깔끔하게 배치. Grid Area 이름 지정으로 직관적으로 관리해요.

💡

Flexbox vs Grid, 무엇을 쓰나요? 단순한 가로 정렬이나 버튼 그룹이라면 Flexbox가 더 간단해요. 2차원(행+열)이 동시에 필요하거나, 요소가 특정 칸에 정확히 위치해야 한다면 Grid가 정답이에요. 실무에서는 전체 페이지 구조는 Grid로, 그 안의 소소한 정렬은 Flexbox로 함께 쓰는 경우가 많아요.

② 핵심 속성

꼭 알아야 할 CSS Grid 속성 6가지

Container에 적용하는 속성들 — 이것만 알면 대부분의 그리드 레이아웃이 가능해요

grid-template-columns

열(column)의 개수와 크기를 정의해요. fr 단위로 비율 지정, repeat()로 반복 선언이 가능해요.

repeat(3, 1fr) 200px 1fr repeat(auto-fill, minmax(250px, 1fr))

grid-template-rows

행(row)의 크기를 정의해요. 보통은 콘텐츠 높이에 맞게 자동이지만, 헤더·푸터 같은 고정 높이에 유용해요.

auto 60px 1fr 44px repeat(3, 100px)

gap

행과 열 사이 간격이에요. row-gapcolumn-gap을 따로 지정할 수도 있어요.

4px 8px 16px 24px 16px 24px

grid-column / grid-row

아이템이 몇 번 줄부터 몇 번 줄까지 차지할지 지정해요. span N으로 N칸 차지도 가능해요.

span 2 1 / 3 1 / -1 span 3

grid-template-areas

이름으로 레이아웃 영역을 지정해요. 코드만 봐도 레이아웃 구조가 한눈에 파악돼요.

"header header" "sidebar main" "footer footer"

auto-fill vs auto-fit

반응형 그리드의 핵심. auto-fill은 빈 칸을 유지, auto-fit은 남은 공간을 아이템이 채워요.

auto-fill auto-fit minmax(250px, 1fr)
📐

fr 단위가 뭔가요? fraction(분수)의 약자예요. 사용 가능한 공간을 비율로 나눠 갖는 단위예요. repeat(3, 1fr)이면 전체 너비를 3등분해요. 1fr 2fr이면 1:2 비율로 나눠요. 픽셀(px)처럼 절대값이 아니라 남은 공간을 기준으로 계산하기 때문에 반응형에 아주 유용해요.

grid-template-areas 시각화

grid-template-areas: "header header" / "sidebar main" / "footer footer"
header
sidebar
main
③ 코드

자주 쓰는 CSS Grid 패턴 3가지

복붙하면 바로 쓸 수 있는 실전 코드

① 3열 카드 그리드

CSS
.card-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr); /* 3열, 균등 분배 */
  gap: 20px;
}

② 홈페이지 레이아웃 (header + sidebar + main + footer)

CSS
.layout {
  display: grid;
  grid-template-areas:
    "header header"
    "sidebar main"
    "footer footer";
  grid-template-columns: 240px 1fr;
  grid-template-rows: 60px 1fr 44px;
  min-height: 100vh;
}

.header  { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main    { grid-area: main; }
.footer  { grid-area: footer; }

③ 반응형 카드 (auto-fill + minmax)

CSS
.responsive-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
  /* 각 칸 최소 250px, 최대 1fr (남은 공간 균등 분배) */
  /* 화면이 좁아지면 자동으로 열 수가 줄어들어요 */
  gap: 16px;
}
🤖 AI 프롬프트 TIP

아래 프롬프트를 AI에게 그대로 붙여넣으면 완성도 높은 CSS Grid 레이아웃을 바로 받을 수 있어요.

내 웹페이지에 CSS Grid로 3열 카드 레이아웃을 만들어줘.
- 카드 최소 너비 280px, 최대 1fr
- 카드 간격 20px
- 모바일에서는 1열로 변경 (768px 이하)
- 카드 hover 시 살짝 위로 올라오는 효과
④ 플레이그라운드

직접 조작해보는 CSS Grid 데모

속성을 바꾸면 박스들이 실시간으로 변해요. 박스를 클릭하면 span 2를 토글해요.

아래 박스를 클릭하면 grid-column: span 2 가 토글돼요

1
2
3
4
5
6
⑥ FAQ

자주 묻는 질문

CSS Grid를 쓰다 보면 꼭 만나는 궁금증

Grid와 Flexbox를 언제 각각 쓰나요?
CSS Grid2차원 레이아웃에 써요. 행과 열이 동시에 관여하는 구조, 즉 전체 페이지 레이아웃이나 카드 그리드처럼 가로·세로가 함께 정해져야 할 때 최적이에요.

Flexbox1차원 정렬에 써요. 버튼 그룹을 가로로 줄 세우거나, 아이콘과 텍스트를 나란히 놓거나, 내비게이션 링크를 세로로 나열할 때처럼 한 방향으로만 정렬할 때 적합해요.

실무에서는 둘을 함께 써요. 예를 들어 전체 페이지 레이아웃은 Grid로 잡고, 각 카드 내부의 아이콘+텍스트 정렬은 Flexbox로 처리하는 식이에요.
IE(인터넷 익스플로러)에서 CSS Grid가 안 된다고 들었어요
맞아요, IE는 2016년에 구버전 Grid 명세(접두사 필요)를 지원했지만 현대 표준과는 달라요. 하지만 마이크로소프트는 2022년에 IE를 공식 종료했고, 현재 IE의 전 세계 점유율은 0.5% 미만이에요.

현대 브라우저(Chrome, Firefox, Safari, Edge)는 모두 CSS Grid를 완벽 지원해요. caniuse.com 기준 전 세계 지원율은 98% 이상이에요.

특수한 공공기관·금융 서비스처럼 IE를 필수 지원해야 하는 환경이 아니라면, IE 걱정 없이 Grid를 마음껏 쓰세요.
fr 단위가 정확히 뭔가요?
frfraction(분수)의 약자로, 그리드 컨테이너에서 남은 공간을 비율로 나누는 단위예요.

예를 들어 grid-template-columns: 1fr 2fr이면 전체 너비에서 2:1로 나눠 첫 번째 열은 1/3, 두 번째 열은 2/3을 차지해요.

repeat(3, 1fr)은 전체 너비를 균등하게 3등분해요. 고정 너비(px)와 함께 쓸 수도 있어요. 예: 240px 1fr — 왼쪽 사이드바는 240px 고정, 나머지는 메인 콘텐츠가 다 가져가요.
auto-fill과 auto-fit의 차이가 뭔가요?
둘 다 repeat() 안에서 반응형 그리드를 만들 때 써요.

auto-fill — 컨테이너 너비에 맞춰 최대한 많은 열을 만들어요. 아이템이 없어도 빈 열을 유지해요.
auto-fit — 역시 최대한 열을 만들지만, 아이템이 없는 빈 열은 0px로 접어버려요. 덕분에 아이템이 적을 때 남은 공간을 기존 아이템이 채울 수 있어요.

실무에서는 대부분 auto-fill이 예측하기 더 쉬워서 많이 써요. 아이템 수가 항상 열 수를 채운다면 둘의 차이는 없어요.
grid-template-areas에서 점(.)은 뭔가요?
grid-template-areas에서 점(.)은 빈 셀을 의미해요. 해당 위치에 아무 아이템도 배치되지 않아요.

예를 들어 "sidebar . main"처럼 쓰면 가운데 칸은 비어있고 좌우에만 콘텐츠가 들어가요.

또한 area 이름은 반드시 직사각형 형태여야 해요. L자 모양처럼 비직사각형 영역은 만들 수 없어요.
이런 것도 배워봐요

CSS Grid를 익혔다면

자연스럽게 이어지는 주제들로 실력을 넓혀봐요