• 고객센터
  • ★ 웹 무료강의

★ 웹 무료강의

모던DS 웹에이전시

웹 무료강의 | 프론트엔드 강의

CSS CSS 그리드 레이아웃 (Grid Layout) 기초설명

페이지 정보

profile_image
작성자 모던DS
조회 60회

본문

CSS 그리드 레이아웃 기초설명


CSS 그리드 레이아웃은 페이지를 행(Row)과 열(Column)로 나누어 요소를 배치할 수 있는 2차원(2D) 레이아웃 시스템입니다. 

Flexbox가 1차원(한 방향) 레이아웃에 최적화되어 있다면, Grid는 복잡한 웹 페이지 구조를 설계하는 데 가장 강력한 도구입니다.

플렉스 박스 레이아웃은 주축/교차축 개념이 있지만 css 그리드 레이아웃은 양쪽 방향 모두 사용

(플렉스 그리드 레이아웃은 1차원, css 그리드 레이아웃은 2차원이라고도 함)

행(row)과 열(column)로 화면을 구성하고, 필요할 경우 그리드 항목 사이에 간격을 둘 수 있다.


77044a127a5c824a243bd5f24414c9f9_1772133835_5803.png
 



1. 핵심 개념

  • Grid Container (그리드 컨테이너): display: grid;를 설정한 부모 요소입니다.

  • Grid Item (그리드 아이템): 컨테이너 내부의 직계 자식 요소들입니다.

  • Grid Line (그리드 라인): 그리드를 나누는 경계선입니다. 번호(1, 2, 3...)로 참조합니다.

  • Grid Cell (그리드 셀): 그리드의 가장 작은 단위(한 칸)입니다.

  • Grid Track (그리드 트랙): 두 라인 사이의 행 또는 열 전체를 의미합니다.

  • Grid Area (그리드 영역): 여러 셀을 합쳐 만든 사각형 영역입니다.



2. 컨테이너 속성 (부모 요소)

그리드의 틀을 잡을 때 사용하는 주요 속성입니다.

  • grid-template-columns / grid-template-rows: 열과 행의 크기를 정의합니다.

    • fr 단위: 유연한 비율(fraction)을 의미합니다. (예: 1fr 2fr은 1:2 비율)

    • repeat(): 반복되는 크기를 간편하게 작성합니다.

  • gap: 그리드 아이템 사이의 간격을 설정합니다.

  • grid-template-areas: 각 영역에 이름을 붙여 레이아웃을 시각적으로 배치합니다.



CSS

.container { display: grid; grid-template-columns: 200px 1fr 1fr; /* 세 개 열 생성 */ grid-template-rows: auto 100px; /* 두 개 행 생성 */ gap: 10px; /* 아이템 사이 간격 10px */ }



3. 아이템 속성 (자식 요소)

특정 아이템이 그리드 내 어디에 위치할지 결정합니다.

  • grid-column / grid-row: 시작 라인과 끝 라인 번호를 지정합니다.

    • span 키워드: 몇 칸을 차지할지 지정합니다.

  • grid-area: 컨테이너에서 정의한 영역 이름을 할당합니다.

CSS

.item { grid-column: 1 / 3; /* 1번 라인부터 3번 라인까지 (2칸 차지) */ grid-row: span 2; /* 현재 위치에서 아래로 2칸 차지 */ }



4. Flexbox vs Grid 비교

구분

Flexbox

CSS Grid

차원

1차원 (행 또는 열 중 하나)

2차원 (행과 열 동시 제어)

정렬 기준

콘텐츠 중심 (Content-first)

레이아웃 중심 (Layout-first)

주요 용도

메뉴 바, 단순 정렬, 요소 간 간격

전체 웹사이트 레이아웃, 대시보드


   <!DOCTYPE html>

  <html lang="ko">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>CSS Grid Layout</title>
    <style>
      /* 그리드 컨테이너에서 열과 행 지정하기 */
      .container {
        display:grid;
        grid-template-columns: 100px 200px 300px;
        grid-template-rows: 50px 100px;
      }
      .items{
        border: 1px solid #222;
        padding:10px;    
        font-size: 20px;
        text-align: center;
      }  
      .items:nth-child(even) {
        background-color:#ffc400;
      }
    </style>
  </head>
  <body>
    <div class="container">
      <div class="items">1</div>
      <div class="items">2</div>
      <div class="items">3</div>
      <div class="items">4</div>
      <div class="items">5</div>
      <div class="items">6</div>
    </div>
  </body>
  </html>

77044a127a5c824a243bd5f24414c9f9_1772134123_5969.png