본문 바로가기

정리/CSS

[CSS] Grid

1. Grid란?

Grid란 웹 페이지의 레이아웃을 디자인하고 구성하는 데 사용되는 CSS 레이아웃 시스템이다. 그리드 레이아웃을 사용하면 웹 페이지의 요소들을 행과 열의 그리드로 배치할 수 있으며, 복잡한 레이아웃을 더 쉽게 관리할 수 있다.

 

2. Grid Container

Grid Items를 포함하는 부모 요소다. 속성을 설정하면 각각의 아이템들이 설정한 형태로 배치된다.

.container {
  display: grid;
}

container에 display: grid; 설정해야 한다.

 

2.1 grid-template-columns 및 grid-template-rows

그리드의 열과 행을 정의하는 속성이다. 각 열과 행의 크기는 여러가지 값과 단위로 설정할 수 있다.

.container {
  grid-template-columns: 1fr 2fr 1fr; /* 3개의 열을 정의 */
  grid-template-rows: auto 100px;     /* 2개의 행을 정의 */
}

 

fr

fr은 전체 크기에 대해 상대적인 값을 지정할 수 있다.

.container {
  grid-template-columns: 1fr 1fr 1fr;  /* 1:1:1 비율인 3개의 열 */
  grid-template-rows: 150px 2fr 200px; /* 고정 크기와 섞어서 사용 가능 */
}

 

repeat 함수

repeat은 반복되는 값을 자동으로 처리할 수 있는 함수다.

repeat(반복횟수, 반복값) 형식으로 작성할 수 있다.

.container {
  grid-template-columns: repeat(4, 1fr); /* 1fr 1fr 1fr 1fr */
}

 

minmax 함수

minmax는 최솟값과 최댓값을 지정할 수 있는 함수다.

minmax(최솟값, 최댓값) 형식으로 작성할 수 있다.

.container {
  grid-template-columns: repeat(3, minmax(200px, 1fr));
}

위 코드는 화면 너비가 작아지더라도 열의 너비는 200px보다 작아지지 않고, 화면 너비가 넓어지면 열의 너비는 1:1:1 비율로 늘어나도록 처리한다.

 

auto-fill

auto-fill은 개수를 미리 정하지 않고 설정된 너비가 허용하는 한 최대한 셀을 채운다.

.container {
  grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
}

위 코드는 컨테이너의 크기가 아이템들을 수용하기 충분하지 않을 경우 아이템을 자동으로 줄 바꿈 처리한다.

 

2.2 gap

그리드 셀 사이의 간격을 지정한다.

.container {
  gap: 30px; /* row-gap: 30px; column-gap: 30px; */
}
.container {
  gap: 10px 20px; /* row-gap: 10px; column-gap: 20px; */
}

 

 

2.3 grid-template-areas

각 영역에 이름을 붙이고 그 이름을 이용해서 배치하는 속성이다. 그리드 레이아웃을 더 직관적으로 정의할 수 있다.

참고로 이름 대신 마침표(.)를 쓰면 셀을 비워놓게 된다.

.container {
  grid-template-areas:
    "header header header"
    "side main ."
    "footer footer footer";
}
.header {
  grid-area: header;
}
.side {
  grid-area: side;
}
.main {
  grid-area: main;
}
.footer {
  grid-area: footer;
}

 

3. Grid Items

Grid Container의 자식 요소들이다. 

 

3.1 grid-column 및 grid-row

grid item이 차지하는 열 및 행 범위를 지정한다.

column line은 왼쪽에서 오른쪽으로, row line은 위에서 아래쪽으로 번호를 붙인다. 바깥 테두리도 grid line에 포함된다.

span 쓰면 멸 개의 셀을 차지하게 할 것인지 지정해줄 수도 있다.

.item {
  grid-column: 2 / 4;   /* 2번부터 3번 열까지 */
  grid-row: 1 / span 3; /* 1번에서 3칸 */
}

 

3.2 grid-area

grid item이 차지하는 영역의 이름을 지정한다.

container에 grid-template-areas와 같이 쓰인다.

'정리 > CSS' 카테고리의 다른 글

[CSS] reset.css vs normalize.css  (0) 2023.11.09