본문 바로가기
[R&D] 프로그래밍/Web (HTML, CSS)

[HTML/CSS] CSS Grid를 사용한 웹페이지 레이아웃 설계

by Geuni 2023. 2. 27. 00:27
728x90
반응형

Flexbox에 이어 이번 글에서는 CSS Grid를 사용한 웹페이지 레이아웃 설계의 예시를 소개하고, 기본 개념과 사용 방법을 자세히 알아보겠습니다.

Grid란?

Grid는 CSS의 레이아웃 모듈 중 하나로, 그리드 레이아웃을 만드는 데 사용됩니다. 그리드 레이아웃은 열과 행으로 구성된 그리드를 사용하여 레이아웃을 구성하는 방법입니다. 이전에는 flexbox를 사용하여 레이아웃을 구성하는 것이 일반적이었지만, Grid는 더 복잡한 레이아웃을 만드는 데 훨씬 유용합니다.

 

CSS Grid를 사용하면 다음과 같은 이점이 있습니다.

  • 유연한 레이아웃을 만들 수 있습니다.
  • 레이아웃을 더 쉽게 디자인할 수 있습니다.
  • 반응형 레이아웃을 만들기가 더 쉬워집니다.

Grid의 구성 요소

Grid는 두 가지 개념을 중심으로 동작합니다: 그리드 컨테이너(Grid Container)와 그리드 아이템(Grid Item)입니다.

Grid Container

그리드 컨테이너는 그리드의 부모 요소입니다. 즉, 그리드 레이아웃을 만들기 위해 부모 요소에 display: grid를 적용합니다. 이 때, 부모 요소는 그리드의 영역을 지정합니다.

.container {
  display: grid;
}

 

Grid Item

그리드 아이템은 그리드 내부의 자식 요소입니다. grid-column과 grid-row 속성을 사용하여 그리드 아이템의 위치를 지정할 수 있습니다.

.item {
  grid-column: 1 / 3; /* 1번째 열부터 3번째 열까지 */
  grid-row: 2 / 4; /* 2번째 행부터 4번째 행까지 */
}

Grid Line

그리드 라인은 그리드의 가로 또는 세로 축에서 행 또는 열의 경계를 나타내는 선입니다.

.container {
  display: grid;
  grid-template-columns: 50px 50px 50px; /* 3개의 열을 가지는 그리드 */
  grid-template-rows: 50px 50px 50px; /* 3개의 행을 가지는 그리드 */
}

Grid Template

그리드 템플릿은 그리드의 열과 행의 크기와 개수를 지정하는 속성입니다. grid-template-columns와 grid-template-rows 속성을 사용하여 그리드 템플릿을 설정할 수 있습니다.

.container {
  display: grid;
  grid-template-columns: 50px 50px 50px; /* 3개의 열을 가지는 그리드 */
  grid-template-rows: 50px 50px 50px; /* 3개의 행을 가지는 그리드 */
}

Grid Area

그리드 영역은 그리드 내에서 여러 셀(cell)을 하나의 영역으로 묶는 방법입니다. grid-area 속성을 사용하여 그리드 영역을 지정할 수 있습니다.

.item {
  grid-area: 2 / 2 / 4 / 4; /* 2번째 행부터 4번째 행까지, 2번째 열부터 4번째 열까지 */
}

Grid를 활용한 간단한 웹페이지 레이아웃 설계

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

        .header {
          grid-column: 1 / span 2;
          grid-row: 1;
          background-color: #4CAF50;
          color: white;
          padding: 10px;
          text-align: center;
        }

        .sidebar {
          grid-column: 1;
          grid-row: 2 / span 2;
          background-color: #2196F3;
          color: white;
          padding: 10px;
          text-align: center;
        }

        .content {
          grid-column: 2;
          grid-row: 2;
          background-color: #f44336;
          color: white;
          padding: 10px;
          text-align: center;
        }

        .footer {
          grid-column: 1 / span 2;
          grid-row: 3;
          background-color: #555555;
          color: white;
          padding: 10px;
          text-align: center;
        }
      </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>

 

위 코드에서 body에 있는 container는 그리드 컨테이너입니다. header, sidebar, content, footer는 그리드 아이템입니다.

그리 첫 번째 열은 200px, 두 번째 열은 나머지 공간을 차지하도록 grid-template-columns 속성에 200px 1fr 값을 할당했습니다. 또한, 첫 번째 행은 100px, 두 번째 행은 나머지 공간을 차지하도록 grid-template-rows 속성에 100px 1fr 50px 값을 할당했습니다.

※ fr은 분수(fraction)를 나타내는 단위로 유연하게 크기를 가져가는 단위입니다. 예로
 [grid-template-columns: 100px 1fr 2fr] 와 같이 설정했다면 100px을 고정으로 하는 행하나와 잔여 공간에 각각 비율로 1/3, 2/3 크기를 갖는 행이 두개 생기는 것입니다.

그리드 아이템들은 grid-column과 grid-row 속성을 사용하여 그리드 영역을 지정하였습니다. header는 첫 번째 열부터 두 칸을 차지하며, 첫 번째 행에 위치합니다. sidebar는 첫 번째 열에 위치하며, 두 번째 행부터 두 칸을 차지합니다. content는 두 번째 열에 위치하며, 두 번째 행에 위치합니다. footer는 첫 번째 열부터 두 칸을 차지하며, 세 번째 행에 위치합니다.

728x90
반응형

댓글