본문 바로가기
Study/CSS

CSS 기초 강의 5편: Grid 레이아웃을 활용한 2차원 레이아웃 구성하기

by wawManager 2024. 11. 20.
728x90

1. Grid 레이아웃 기본 개념

Grid 레이아웃은 **그리드 컨테이너(Grid Container)**와 **그리드 아이템(Grid Item)**으로 구성됩니다.

  • 그리드 컨테이너: display: grid로 정의된 부모 요소로, 그리드 레이아웃을 구성할 수 있게 합니다.
  • 그리드 아이템: 그리드 컨테이너 내부의 자식 요소로, 그리드의 각 셀을 차지합니다.
.container {
    display: grid; /* 그리드 컨테이너 설정 */
}

2. 기본 그리드 설정

1) grid-template-columns와 grid-template-rows

그리드의 열과 행의 크기를 정의합니다. 각각 열과 행의 수를 지정하며, px, %, fr(fraction), auto 등 다양한 단위를 사용할 수 있습니다.

.container {
    display: grid;
    grid-template-columns: 1fr 2fr 1fr; /* 3개의 열을 정의 */
    grid-template-rows: 100px 200px;    /* 2개의 행을 정의 */
}
  • fr 단위: 그리드의 남은 공간을 비율로 분할할 때 사용됩니다.
  • px, %, auto: 고정 크기나 비율로 크기를 지정할 수 있습니다.

2) grid-gap

그리드 셀 사이의 간격을 설정합니다. grid-row-gap과 grid-column-gap 속성으로 각각 행과 열의 간격을 따로 지정할 수도 있습니다.

.container {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
    grid-gap: 10px; /* 모든 셀 사이에 10px 간격 */
}

3. 그리드 아이템 배치

1) grid-column과 grid-row

각 그리드 아이템의 열과 행을 지정하여 위치를 설정합니다.

  • grid-column: start / end: 열의 시작과 끝 위치를 지정합니다.
  • grid-row: start / end: 행의 시작과 끝 위치를 지정합니다.
.item1 {
    grid-column: 1 / 3; /* 첫 번째 열에서 세 번째 열 앞까지 차지 */
    grid-row: 1 / 2;    /* 첫 번째 행을 차지 */
}

예제

<!DOCTYPE html>
<html>
<head>
    <title>CSS Grid 예제</title>
    <style>
        .container {
            display: grid;
            grid-template-columns: 1fr 1fr 1fr;
            grid-template-rows: 100px 100px;
            grid-gap: 10px;
        }

        .item1 {
            background-color: #4CAF50;
            grid-column: 1 / 3; /* 첫 번째 열부터 세 번째 열까지 차지 */
            grid-row: 1 / 2;    /* 첫 번째 행을 차지 */
        }

        .item2 {
            background-color: #2196F3;
        }

        .item3 {
            background-color: #FF5722;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="item1">Item 1</div>
        <div class="item2">Item 2</div>
        <div class="item3">Item 3</div>
    </div>
</body>
</html>

 

코드 설명

  • grid-template-columns: 1fr 1fr 1fr: 3개의 열을 동일한 비율로 설정합니다.
  • grid-column: 1 / 3: Item 1이 첫 번째 열부터 세 번째 열까지 가로로 확장됩니다.

4. 그리드 영역 설정 (grid-template-areas)

grid-template-areas 속성은 그리드 컨테이너의 레이아웃을 시각적으로 구성할 수 있게 해 줍니다. 그리드 아이템에 이름을 붙여 grid-area 속성으로 위치를 지정합니다.

예제

.container {
    display: grid;
    grid-template-columns: 1fr 2fr 1fr;
    grid-template-rows: 100px 100px;
    grid-template-areas:
        "header header header"
        "sidebar content sidebar";
}

.header {
    grid-area: header;
    background-color: #333;
}

.sidebar {
    grid-area: sidebar;
    background-color: #f4f4f4;
}

.content {
    grid-area: content;
    background-color: #ddd;
}

코드 설명

  • grid-template-areas: 레이아웃을 시각적으로 구성하여 각 아이템의 위치를 직관적으로 설정합니다.
  • grid-area: 각 아이템의 이름을 정의해 그리드 영역에 맞게 배치합니다.

5. CSS Grid 속성 요약

속성설명

display: grid 그리드 컨테이너로 설정
grid-template-columns 열의 크기와 개수를 설정
grid-template-rows 행의 크기와 개수를 설정
grid-gap 그리드 아이템 사이의 간격을 설정
grid-column 아이템의 열 위치를 지정 (start / end 형식)
grid-row 아이템의 행 위치를 지정 (start / end 형식)
grid-template-areas 그리드 영역을 이름으로 구성하여 배치
grid-area grid-template-areas에서 지정한 이름과 아이템을 매칭하여 배치

예제: Grid를 활용한 레이아웃 구성

아래는 Grid 레이아웃을 사용하여 웹 페이지 구조를 구성한 예제입니다.

<!DOCTYPE html>
<html>
<head>
    <title>CSS Grid 레이아웃</title>
    <style>
        .container {
            display: grid;
            grid-template-columns: 1fr 3fr;
            grid-template-rows: auto 1fr auto;
            grid-template-areas:
                "header header"
                "sidebar content"
                "footer footer";
            gap: 10px;
            height: 100vh;
        }

        .header {
            grid-area: header;
            background-color: #4CAF50;
            color: white;
            padding: 20px;
            text-align: center;
        }

        .sidebar {
            grid-area: sidebar;
            background-color: #f4f4f4;
            padding: 20px;
        }

        .content {
            grid-area: content;
            background-color: #ddd;
            padding: 20px;
        }

        .footer {
            grid-area: footer;
            background-color: #333;
            color: white;
            text-align: center;
            padding: 10px;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="header">Header</div>
        <div class="sidebar">Sidebar</div>
        <div class="content">Content</div>
        <div class="footer">Footer</div>
    </div>
</body>
</html>

코드 설명

  • grid-template-areas를 사용하여 header, sidebar, content, footer 영역을 쉽게 정의했습니다.
  • 각 영역은 grid-area 속성으로 이름을 지정해 배치했습니다.

요약

이번 강의에서는 CSS Grid 레이아웃의 기본 개념과 속성들을 학습했습니다. Grid 레이아웃을 활용하면 복잡한 2차원 레이아웃을 쉽게 구성할 수 있으며, 다양한 화면 크기에서도 유연하게 디자인을 조정할 수 있습니다. 다음 강의에서는 반응형 웹 디자인과 미디어 쿼리를 통해 다양한 디바이스 환경에서도 잘 동작하는 웹 페이지를 만드는 방법을 알아보겠습니다.

728x90