꽈코 님의 블로그

프론트엔드 개발자를 넘어 풀스텍 개발자가 되기까지!! 개발자의 모든것!!

  • 2025. 3. 18.

    by. kkwako

    목차

      최신 CSS 기능 – CSS Grid, Flexbox, Subgrid 완벽 가이드

      1. 개요

      웹 디자인에서 **레이아웃(layout)**은 사용자의 경험과 인터페이스(UI)를 결정짓는 중요한 요소이다. 과거에는 float, table, position을 이용해 레이아웃을 구성했지만, 유지보수와 확장성이 떨어지는 단점이 있었다.

      현대 웹 개발에서는 CSS Grid, Flexbox, 그리고 Subgrid를 활용하여 더욱 직관적이고 강력한 방식으로 레이아웃을 구성할 수 있다.

      • CSS Grid: 2차원(행 & 열) 레이아웃을 쉽게 구성할 수 있음
      • Flexbox: 1차원(가로 또는 세로) 정렬을 유연하게 조정할 수 있음
      • Subgrid: CSS Grid 내부에서 하위 요소도 부모의 그리드에 맞출 수 있음

      이 글에서는 최신 CSS 기능인 CSS Grid, Flexbox, Subgrid를 상세히 설명하고, 실용적인 예제와 함께 어떻게 활용할 수 있는지 살펴본다.


      2. CSS Flexbox – 1차원 레이아웃

      1) Flexbox란?

      CSS **Flexbox(Flexible Box)**는 1차원 레이아웃을 쉽게 조정할 수 있는 방법으로, 요소를 가로 또는 세로 방향으로 유연하게 정렬할 수 있다.

      Flexbox의 특징

      • 컨테이너 내부의 요소를 자동으로 정렬
      • display: flex 속성을 사용하여 레이아웃을 유연하게 조정
      • justify-content, align-items 등을 이용한 간편한 정렬
      • 반응형 웹 디자인에 유용함

      2) 기본 문법

      .container {
        display: flex; /* Flexbox 활성화 */
        justify-content: center; /* 가로 정렬 */
        align-items: center; /* 세로 정렬 */
        gap: 10px; /* 요소 간격 */
      }
      <div class="container">
        <div class="box">1</div>
        <div class="box">2</div>
        <div class="box">3</div>
      </div>

      주요 속성

      속성 설명
      display: flex; Flexbox 활성화
      flex-direction 주 축 방향 설정 (row, column)
      justify-content 가로 방향 정렬 (center, space-between 등)
      align-items 세로 방향 정렬 (center, stretch 등)
      flex-wrap 요소가 한 줄 또는 여러 줄로 배치될지 결정

      3) Flexbox 활용 예제 – 반응형 네비게이션 바

      .navbar {
        display: flex;
        justify-content: space-between;
        align-items: center;
        padding: 10px 20px;
      }
       

       


      3. CSS Grid – 2차원 레이아웃

      1) CSS Grid란?

      CSS Grid는 행(Row)과 열(Column)을 동시에 제어할 수 있는 강력한 레이아웃 시스템이다. 기존 float이나 position 없이도 복잡한 레이아웃을 간단하게 구현할 수 있다.

      CSS Grid의 특징

      • 2차원(가로 + 세로) 레이아웃 가능
      • display: grid 속성을 사용하여 간단하게 레이아웃 구성
      • grid-template-columns, grid-template-rows를 이용해 행/열 크기 조정
      • 반응형 디자인을 쉽게 구현 가능

      2) 기본 문법

      .container {
        display: grid;
        grid-template-columns: repeat(3, 1fr); /* 3개의 동일한 너비 열 */
        grid-template-rows: auto; /* 행 크기 자동 조정 */
        gap: 10px; /* 요소 간격 */
      }
      <div class="container">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
      </div>

      주요 속성

      속성 설명
      display: grid; Grid 활성화
      grid-template-columns 열 크기 설정 (repeat(3, 1fr))
      grid-template-rows 행 크기 설정
      gap 요소 간격 조정
      grid-column 특정 열을 차지할 범위 지정
      grid-row 특정 행을 차지할 범위 지정

      3) CSS Grid 활용 예제 – 카드 레이아웃

      .grid-container {
        display: grid;
        grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
        gap: 20px;
      }
       

      4. CSS Subgrid – 부모 Grid에 맞춘 하위 레이아웃

      1) Subgrid란?

      Subgrid는 부모 요소의 grid 설정을 하위 요소에서도 그대로 상속하여 적용할 수 있도록 만든 기능이다. 기존 CSS Grid에서는 하위 요소가 별도로 레이아웃을 설정해야 했지만, Subgrid를 사용하면 부모와 동일한 기준으로 정렬할 수 있다.

      Subgrid의 특징

      • 부모 grid 설정을 그대로 따름
      • 요소 간 정렬을 쉽게 조정 가능
      • 복잡한 레이아웃을 더 간결하게 구현

      2) 기본 문법

      .container {
        display: grid;
        grid-template-columns: 1fr 2fr;
      }
      
      .subgrid {
        display: grid;
        grid-column: subgrid;
      }

      주요 속성

      속성 설명
      display: subgrid; 부모 grid의 설정을 그대로 따름
      grid-column: subgrid; 부모의 열 설정을 따름
      grid-row: subgrid; 부모의 행 설정을 따름

      3) Subgrid 활용 예제 – 복잡한 카드 레이아웃

      .container {
        display: grid;
        grid-template-columns: repeat(3, 1fr);
      }
      
      .card {
        display: grid;
        grid-template-rows: subgrid;
      }

      5. 결론

      Flexbox vs. Grid vs. Subgrid 정리

      기능 Flexbox CSS Grid Subgrid
      레이아웃 유형 1차원 (가로/세로) 2차원 (가로 + 세로) 부모 grid 상속
      주요 용도 네비게이션 바, 리스트 정렬 대규모 레이아웃 구성 하위 요소 정렬 개선
      정렬 방식 justify-content, align-items grid-template-columns, grid-template-rows grid-column: subgrid
      • Flexbox: 가로 또는 세로 정렬이 필요한 경우 (네비게이션, 버튼 정렬 등)
      • CSS Grid: 전체 레이아웃을 구성할 때 (대시보드, 갤러리 등)
      • Subgrid: 부모 grid의 설정을 유지하며 하위 요소를 정렬할 때 사용

      최신 CSS 기능을 활용하면 더 효율적이고 직관적인 레이아웃을 구현할 수 있다. 특히, 반응형 웹 디자인과 유지보수성 향상에 큰 도움이 된다. CSS Grid, Flexbox, Subgrid를 적절히 조합하여 최적의 레이아웃을 설계해보자.