CSS 그리드는 CSS에서 가장 강력한 레이아웃 시스템이지만, 그리드 속성을 직접 작성하는 것은 번거롭습니다 — 특히 컬럼 수, 간격 크기, 명명된 템플릿 영역을 반복적으로 조정할 때. CSS 그리드 생성기를 사용하면 레이아웃을 시각적으로 구성하고 필요한 CSS를 바로 복사할 수 있습니다.

CSS 그리드 생성기 사용해보기 →

CSS 그리드 동작 원리

CSS 그리드는 컨테이너를 2차원 레이아웃 시스템으로 변환합니다. Flexbox(단일 축을 따라 아이템 배치)와 달리 그리드는 행과 열 모두를 동시에 명시적으로 제어합니다.

.container {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-template-rows: auto;
  gap: 1.5rem;
}

이렇게 하면 3열 그리드가 생성되어 각 열이 사용 가능한 너비를 균등하게 나누고, 모든 셀 사이에 1.5rem 간격이 추가됩니다.

핵심 그리드 속성

grid-template-columnsgrid-template-rows

그리드의 트랙 구조를 정의합니다. 가장 일반적인 패턴:

패턴CSS결과
균등 컬럼repeat(3, 1fr)3개 동일 너비 컬럼
고정 + 유동240px 1fr사이드바 + 메인 콘텐츠
명명된 영역[sidebar] 240px [main] 1fr명명된 컬럼 트랙
자동 채우기repeat(auto-fill, minmax(200px, 1fr))반응형 카드 그리드
혼합 단위200px 1fr 2fr고정 후 유동 컬럼 2개

gap (구 grid-gap)

트랙 사이의 간격을 제어합니다. 행과 열 간격을 각각 설정할 수 있습니다:

gap: 1rem;           /* 양방향 동일 간격 */
gap: 1rem 2rem;      /* row-gap column-gap */
row-gap: 1rem;
column-gap: 2rem;

grid-columngrid-row

그리드 내에서 아이템을 명시적으로 배치:

.hero {
  grid-column: 1 / -1;   /* 전체 너비 스팬 */
  grid-row: 1 / 3;       /* 2행 스팬 */
}

.sidebar {
  grid-column: 1;
  grid-row: 2 / 5;
}

.main {
  grid-column: 2 / -1;
  grid-row: 2 / 5;
}

-1은 마지막 그리드 라인을 가리키므로, 1 / -1은 컬럼 수와 관계없이 항상 전체 너비가 됩니다.

grid-template-areas

명명된 영역으로 복잡한 레이아웃을 가독성 높게:

.layout {
  display: grid;
  grid-template-columns: 240px 1fr;
  grid-template-rows: 60px 1fr 40px;
  grid-template-areas:
    "header  header"
    "sidebar main"
    "footer  footer";
}

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

grid-template-areas의 각 문자열은 하나의 행을 나타냅니다. 반복된 이름은 여러 셀에 스팬됩니다. .은 빈 셀을 나타냅니다.

일반적인 그리드 패턴

카드 그리드 (자동 반응형)

가장 일반적인 사용 사례: 미디어 쿼리 없이 사용 가능한 공간을 채우고 자연스럽게 줄 바꿈하는 카드 그리드.

.card-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: 1.5rem;
}

auto-fill은 맞는 만큼 컬럼을 생성합니다. minmax(280px, 1fr)으로 각 카드는 최소 280px 너비를 유지하면서 사용 가능한 공간으로 확장됩니다.

홀리 그레일 레이아웃

헤더와 푸터가 있는 고전적인 3열 레이아웃:

.page {
  display: grid;
  grid-template-columns: 200px 1fr 160px;
  grid-template-rows: auto 1fr auto;
  grid-template-areas:
    "header  header  header"
    "nav     main    aside"
    "footer  footer  footer";
  min-height: 100vh;
}

메이슨리 스타일 그리드

진정한 메이슨리에는 JavaScript가 필요하지만 근사치를 구현할 수 있습니다:

.masonry {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-auto-rows: 10px;
  gap: 10px;
}

/* 각 아이템은 콘텐츠 높이에 따라 행을 스팬 */
.item { grid-row-end: span 20; }    /* 짧은 */
.item.tall { grid-row-end: span 35; } /* 긴 */

대시보드 그리드

.dashboard {
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  gap: 1rem;
}

.widget-full    { grid-column: span 12; }
.widget-half    { grid-column: span 6; }
.widget-third   { grid-column: span 4; }
.widget-quarter { grid-column: span 3; }

그리드 레이아웃 반응형으로 만들기

미디어 쿼리 방식

.grid {
  display: grid;
  grid-template-columns: 1fr;          /* 모바일: 1열 */
  gap: 1rem;
}

@media (min-width: 640px) {
  .grid { grid-template-columns: repeat(2, 1fr); }
}

@media (min-width: 1024px) {
  .grid { grid-template-columns: repeat(4, 1fr); }
}

auto-fill + minmax (미디어 쿼리 없음)

.grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 280px), 1fr));
  gap: 1rem;
}

min(100%, 280px)은 매우 좁은 화면에서의 오버플로를 방지합니다 — minmax의 흔한 함정입니다.

명명된 영역 + 미디어 쿼리

.layout {
  display: grid;
  grid-template-areas:
    "header"
    "main"
    "sidebar"
    "footer";
}

@media (min-width: 768px) {
  .layout {
    grid-template-columns: 1fr 300px;
    grid-template-areas:
      "header  header"
      "main    sidebar"
      "footer  footer";
  }
}

그리드 vs Flexbox: 언제 무엇을 사용할까

두 가지 모두 현대적인 레이아웃 도구입니다. 구분은 간단합니다:

  • 그리드: 2차원 레이아웃. 행과 열 모두 제어. 페이지 구조, 대시보드, 카드 그리드, 폼 레이아웃에 사용.
  • Flexbox: 1차원. 아이템이 단일 축을 따라 흐릅니다. 내비게이션 바, 버튼 그룹, 단일 요소 중앙 정렬, 행 내 아이템 정렬에 사용.

두 가지를 조합해서 사용할 수도 있습니다 — 그리드 레이아웃 안에 Flex 컨테이너를 넣거나, 그 반대도 가능합니다.

그리드 레이아웃 디버깅

Chrome, Firefox, Edge 모두 DevTools에 내장 그리드 인스펙터가 있습니다. Elements 패널에서 그리드 컨테이너 옆의 grid 배지를 클릭하면 페이지에 그리드 라인이 오버레이되어 컬럼/행 번호와 간격을 확인할 수 있습니다.

Firefox의 그리드 인스펙터는 특히 강력하여 명명된 영역 하이라이트와 여러 그리드 동시 오버레이를 지원합니다.

CSS 그리드 생성기 활용하기

복잡한 레이아웃에서 grid-template-columns, grid-template-rows, gap 값을 수동으로 설정하면 시행착오가 필요합니다. CSS 그리드 생성기를 사용하면:

  • 컬럼과 행 수를 시각적으로 설정
  • 드래그로 트랙 크기 조정
  • fr, px, %, auto 단위 전환
  • 완성된 CSS 블록을 복사하여 바로 붙여넣기

CSS 그리드 생성기 사용해보기 →