zhaoJian의 기술 노트

IT 강좌 CSS 기초 031_그리드 레이아웃 Grid

학습 / CSS 기초 약 8629자 · 22분 소요 - 조회

그리드 레이아웃 Grid

그리드는 수평 및 수직 선으로 구성된 레이아웃 패턴입니다. 그리드를 사용하여 디자인 요소를 배열하고 고정된 위치와 너비를 가진 일련의 요소를 배치하여 웹사이트 페이지를 더욱 통일되게 만들 수 있습니다.

그리드는 일반적으로 많은 열(column) 과 **행(row)**을 가지며, 행과 행, 열과 열 사이의 간격이 있습니다. 이 간격은 일반적으로 **거터(gutter)**라고 합니다.

예제 효과

기본 개념

Grid 레이아웃은 다음과 같은 기본 개념으로 구성됩니다:

  • 그리드 컨테이너 (grid container): 그리드 레이아웃은 그리드 컨테이너와 그리드 항목으로 구성됩니다. 그리드 컨테이너는 그리드 항목을 그리드에 배치하는 컨테이너입니다. 그리드 컨테이너는 모든 요소가 될 수 있지만 일반적으로 div 요소를 사용합니다.
  • 그리드 항목 (grid item): 그리드 항목은 그리드 컨테이너에 배치된 요소입니다. 그리드 항목은 모든 요소가 될 수 있지만 일반적으로 div 요소를 사용합니다.
  • 그리드 선 (grid line): 그리드 선은 그리드 컨테이너를 행과 열로 나누는 선입니다. 그리드 선은 수평선 또는 수직선일 수 있습니다.
  • 그리드 열 (grid column): 그리드 열은 그리드 컨테이너에서 수직 방향의 선입니다.
  • 그리드 행 (grid row): 그리드 행은 그리드 컨테이너에서 수평 방향의 선입니다.
일반적인 속성

그리드 컨테이너 속성

그리드 컨테이너는 그리드 레이아웃을 제어하기 위해 다음과 같은 속성을 가집니다:

  • display: 그리드 컨테이너의 표시 모드를 설정합니다. 그리드 컨테이너는 그리드 레이아웃을 사용하려면 display: grid 또는 display: inline-grid로 설정해야 합니다.
  • grid-template-columns: 그리드 컨테이너의 열 수와 열 너비를 설정합니다(fr, px, em 등의 단위 사용).
  • grid-template-rows: 그리드 컨테이너의 행 수와 행 높이를 설정합니다(fr, px, em 등의 단위 사용).
  • grid-template: grid-template-columnsgrid-template-rows를 동시에 설정합니다.
  • grid-auto-columns: 그리드 컨테이너의 열 너비를 설정합니다.
  • grid-auto-rows: 그리드 컨테이너의 행 높이를 설정합니다.

그리드 항목 속성

그리드 항목은 그리드에서 그리드 항목의 레이아웃을 제어하기 위해 다음과 같은 속성을 가집니다:

  • grid-column: 그리드 항목이 위치한 열을 설정합니다.
  • grid-row: 그리드 항목이 위치한 행을 설정합니다.
  • grid-column-start: 열에서 그리드 항목의 시작 위치를 설정합니다.
  • grid-column-end: 열에서 그리드 항목의 종료 위치를 설정합니다.
  • grid-row-start: 행에서 그리드 항목의 시작 위치를 설정합니다.
  • grid-row-end: 행에서 그리드 항목의 종료 위치를 설정합니다.
  • grid-area: 그리드 항목이 위치한 영역을 설정합니다.
  • grid-gap: 그리드 선 사이의 간격을 설정합니다.
그리드 레이아웃

고정 및 적응형 열 너비, 행 높이 정의

예제:

.grid-example{
display: grid;
grid-template-columns: 100px 200px auto;
/* 첫 번째 열 100px, 두 번째 열 200px, 나머지 공간은 적응형 열에 할당 */
grid-template-rows: 100px 200px auto;
/* 첫 번째 행 100px, 두 번째 행 200px, 나머지 공간은 적응형 행에 할당 */
}
.item{
margin: 10px;
background-color: rgb(100, 150, 200);
}
<div class="grid-example">
<div class="item">Grid 데모</div>
<div class="item">Grid 데모</div>
<div class="item">Grid 데모</div>
<div class="item">Grid 데모</div>
<div class="item">Grid 데모</div>
<div class="item">Grid 데모</div>
<div class="item">Grid 데모</div>
<div class="item">Grid 데모</div>
<div class="item">Grid 데모</div>
</div>

효과:

예제 효과 백분율을 사용하여 열 너비, 행 높이 정의

예제:

.grid-example{
display: grid;
grid-template-columns: 30% 2fr 1fr;
/* 첫 번째 열은 30%, 두 번째 열은 나머지 공간의 2/3, 세 번째 열은 나머지 공간의 1/3 */
grid-template-rows: 30% 2fr 1fr;
/* 첫 번째 행은 30%, 두 번째 행은 나머지 공간의 2/3, 세 번째 행은 나머지 공간의 1/3 */
}
.item{
margin: 10px;
background-color: rgb(100, 150, 200);
}
<div class="grid-example">
<div class="item">Grid 데모</div>
<div class="item">Grid 데모</div>
<div class="item">Grid 데모</div>
<div class="item">Grid 데모</div>
<div class="item">Grid 데모</div>
<div class="item">Grid 데모</div>
<div class="item">Grid 데모</div>
<div class="item">Grid 데모</div>
<div class="item">Grid 데모</div>
</div>

효과:

예제 효과 동등 분할(평균 분배) 열 너비, 행 높이

예제:

.grid-example{
display: grid;
grid-template-columns: repeat(3, 1fr);
/* 3등분 열, 각 열은 나머지 공간의 1/3 차지 */
grid-template-rows: repeat(3, 1fr);
/* 3등분 행, 각 행은 나머지 공간의 1/3 차지 */
}
.item{
margin: 10px;
background-color: rgb(100, 150, 200);
}
<div class="grid-example">
<div class="item">Grid 데모</div>
<div class="item">Grid 데모</div>
<div class="item">Grid 데모</div>
<div class="item">Grid 데모</div>
<div class="item">Grid 데모</div>
<div class="item">Grid 데모</div>
<div class="item">Grid 데모</div>
<div class="item">Grid 데모</div>
<div class="item">Grid 데모</div>
</div>

효과:

예제 효과 minmax를 사용하여 열, 행의 최소 및 최대 너비, 높이 정의

예제:

.grid-example{
display: grid;
grid-template-columns: minmax(100px, 1fr) minmax(200px, 2fr);
/* 첫 번째 열 최소 너비 100px, 나머지 공간의 1/3; 두 번째 열 최소 너비 200px, 나머지 공간의 2/3 */
grid-template-rows: minmax(100px, 1fr) minmax(200px, 2fr);
/* 첫 번째 행 최소 높이 100px, 나머지 공간의 1/3; 두 번째 행 최소 높이 200px, 나머지 공간의 2/3 */
}
.item{
margin: 10px;
background-color: rgb(100, 150, 200);
}
<div class="grid-example">
<div class="item">Grid 데모</div>
<div class="item">Grid 데모</div>
<div class="item">Grid 데모</div>
<div class="item">Grid 데모</div>
</div>

효과:

예제 효과

그리드 간격

그리드 간격은 grid-row-gapgrid-column-gap 두 속성으로 제어됩니다. 또한 CSS Grid Level 2에서는 grid-row-gapgrid-column-gap을 동시에 제어할 수 있는 gap 속성이 도입되었습니다.

예제:

.grid-example{
display: grid;
grid-template-columns: 30% 30% 30%;
grid-template-rows: 200px 200px;
grid-row-gap: 50px; /* 행 간격 50px */
grid-column-gap: 30px; /* 열 간격 30px */
/* gap: 50px 30px; 행 간격 50px, 열 간격 30px */
}
.item{
margin: 10px;
background-color: rgb(100, 150, 200);
}
<div class="grid-example">
<div class="item">Grid 데모</div>
<div class="item">Grid 데모</div>
<div class="item">Grid 데모</div>
<div class="item">Grid 데모</div>
<div class="item">Grid 데모</div>
<div class="item">Grid 데모</div>
</div>

효과:

예제 효과

그리드 배치

그리드 배치는 일반적으로 grid-column, grid-rowgrid-area와 같은 속성을 사용하여 그리드 레이아웃에서 항목을 배치하는 것을 의미합니다. 이러한 속성은 항목이 그리드에서 차지하는 열과 행을 지정하거나 항목이 위치한 영역을 직접 지정하는 데 사용됩니다.

  • grid-column은 그리드 항목이 차지하는 열을 설정하는 속성입니다. grid-column-startgrid-column-end의 약식 표기입니다. grid-column을 사용하면 수평 방향에서 그리드 항목의 위치와 차지하는 열 수를 더 편리하게 정의할 수 있습니다.
  • grid-row는 그리드 항목이 차지하는 행을 설정하는 속성입니다. grid-row-startgrid-row-end의 약식 표기입니다. grid-row를 사용하면 수직 방향에서 그리드 항목의 위치와 차지하는 행 수를 더 편리하게 정의할 수 있습니다.
  • grid-area 속성은 grid-row-start, grid-column-start, grid-row-endgrid-column-end 속성을 동시에 설정하는 약식 속성입니다. grid-area를 사용하면 그리드 레이아웃에서 그리드 항목의 위치와 크기를 더 직관적으로 정의할 수 있습니다.

예제:

.example {
display: grid;
grid-template-columns: repeat(3, 1fr);
/* 3개의 열 정의, 각 열은 1/3 공간 차지 */
grid-template-rows: repeat(2, 150px);
/* 2개의 행 정의, 각 행 높이는 150px */
gap: 10px;
padding: 20px;
}
.item {
background-color: #f2f2f2;
padding: 20px;
border: 1px solid #ddd;
text-align: center;
}
/* grid-column과 grid-row를 사용한 배치 */
.item1 {
grid-column: 1 / 3; /* 첫 번째 열부터 세 번째 열까지(1+2열) */
grid-row: 1 / 2; /* 첫 번째 행부터 두 번째 행까지(1행) */
}
/* grid-area를 사용한 배치 */
.item2 {
grid-area: 2 / 2 / 3 / 4; /* 두 번째 행 두 번째 열부터 세 번째 행 네 번째 열까지(2행)(2+3열) */
}
<div class="example">
<div class="item item1">Item 1</div>
<div class="item item2">Item 2</div>
<div class="item">Item 3</div>
<div class="item">Item 4</div>
<div class="item">Item 5</div>
<div class="item">Item 6</div>
</div>

효과:

예제 효과

예제:

body {
margin: 0;
padding: 0;
}
.container {
display: grid;
grid-template-columns: 1fr 2fr;
/* 두 개의 열 정의, 첫 번째 열은 1/3, 두 번째 열은 2/3 차지 */
grid-template-rows: auto;
/* 행 높이 정의, 첫 번째와 세 번째 행 높이는 내용에 따라 결정, 두 번째 행은 나머지 공간 차지 */
grid-template-areas:
"header header"
"sidebar main"
"footer footer";
/* 영역 레이아웃 정의, 각 영역은 문자열로 표시, 공백은 셀 구분, 줄바꿈은 새 행 표시 */
min-height: 100vh;
/* 최소 높이 설정, 내용 높이가 뷰포트보다 작을 때도 footer를 볼 수 있도록 보장 */
}
.header {
grid-area: header;
/* .header를 "header"라는 영역에 배치 */
background-color: #333;
color: #fff;
padding: 10px;
}
.sidebar {
grid-area: sidebar;
/* .sidebar를 "sidebar"라는 영역에 배치 */
background-color: #f2f2f2;
padding: 10px;
}
.main {
grid-area: main;
/* .main을 "main"이라는 영역에 배치 */
padding: 10px;
}
.footer {
grid-area: footer;
/* .footer를 "footer"라는 영역에 배치 */
background-color: #333;
color: #fff;
padding: 10px;
}
<div class="container">
<div class="header">Header</div>
<div class="sidebar">Sidebar</div>
<div class="main">
<h1>Main Content</h1>
<p>This is the main content area.</p>
</div>
<div class="footer">Footer</div>
</div>

효과:

예제 효과

공유:

댓글