CSS

Grid layout property

lshjju 2026. 2. 20. 13:20

웹 페이지의 레이아웃을 2차원(행과 열) 격자 형태로 완벽하게 제어할 수 있는 CSS 그리드(Grid) 레이아웃에 대해 알아보겠습니다.

Flexbox가 1차원(한 방향) 레이아웃에 강하다면, Grid는 가로와 세로를 동시에 설계하는 복잡한 레이아웃의 끝판왕입니다.


1. 그리드 컨테이너 속성 (부모 요소)

그리드의 틀을 짜는 설정들입니다.

  • display: grid;: 해당 요소를 그리드 컨테이너로 선언합니다.
  • grid-template-columns / grid-template-rows: 열(Columns)과 행(Rows)의 크기와 개수를 지정합니다.
    • fr 단위: 가용 공간을 비율로 나눕니다. (예: 1fr 2fr은 1:2 비율)
    • repeat() 함수: 반복되는 크기를 쉽게 설정합니다. (예: repeat(3, 1fr))
  • gap (또는 grid-gap): 그리드 아이템 사이의 간격을 설정합니다.

2. 그리드 아이템 속성 (자식 요소)

각 요소가 그리드 안에서 어느 칸을 차지할지 결정합니다.

  • grid-column / grid-row: 아이템이 시작하고 끝나는 '선(Line)' 번호를 지정하여 영역을 차지합니다.
    • span 키워드: 몇 칸을 차지할지 지정합니다. (예: grid-column: span 2;)
  • grid-area: 아이템에 이름을 붙이거나, 행과 열의 범위를 한 번에 지정합니다.

3. grid-template-areas (직관적인 배치)

코드만으로 레이아웃의 형태를 그려볼 수 있는 아주 강력한 속성입니다.

CSS
 
.container {
  display: grid;
  grid-template-areas:
    "header header header"
    "sidebar content content"
    "footer footer footer";
}

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

🖥️ 실전 예제 코드: "신문 스타일 레이아웃"

HTML
 
<style>
  .grid-wrapper {
    display: grid;
    /* 3열로 나누고, 가운데 열은 너비의 2배 */
    grid-template-columns: 1fr 2fr 1fr;
    /* 행의 크기를 자동으로 조절 */
    grid-template-rows: auto 200px auto;
    gap: 15px;
    padding: 10px;
  }

  .item {
    background-color: #3498db;
    color: white;
    padding: 20px;
    text-align: center;
    border-radius: 8px;
  }

  /* 헤더는 첫 번째 줄 전체(3열)를 차지 */
  .header {
    grid-column: 1 / 4;
    background-color: #2c3e50;
  }

  /* 메인 콘텐츠는 2열을 차지 */
  .main {
    grid-column: span 2;
  }

  /* 푸터도 전체를 차지 */
  .footer {
    grid-column: 1 / 4;
    background-color: #7f8c8d;
  }
</style>

<div class="grid-wrapper">
  <div class="item header">Header</div>
  <div class="item main">Main Content</div>
  <div class="item sidebar">Sidebar</div>
  <div class="item footer">Footer</div>
</div>

📋 그리드 주요 속성 요약표

카테고리 속성 설명
컨테이너 grid-template-columns 열의 개수와 너비 정의
컨테이너 grid-template-rows 행의 개수와 높이 정의
컨테이너 gap 그리드 셀 사이의 여백
아이템 grid-column 열 시작/끝 위치 지정
아이템 grid-row 행 시작/끝 위치 지정
아이템 grid-area 아이템의 영역 이름 또는 범위

학습 정리

  • fr 단위는 유연한 레이아웃을 위해 꼭 익혀두어야 합니다.
  • **repeat(auto-fit, minmax(200px, 1fr))**를 사용하면 미디어 쿼리 없이도 완벽한 반응형 그리드를 만들 수 있습니다.
  • 그리드 라인 번호는 1부터 시작하며, -1을 쓰면 마지막 라인을 의미합니다.

2차원 레이아웃의 최강자인 그리드까지 마스터하셨습니다!


'CSS' 카테고리의 다른 글

Flexbox game  (0) 2026.02.20
Grid lines and template areas  (0) 2026.02.20
CSS Functions  (0) 2026.02.20
Pseudo-elements  (0) 2026.02.20
Pseudo-classes  (0) 2026.02.20