노트

CSS Grid

CSS Grid Layout

프런트엔드#css · 연결된 개념 6개

쉽게 말하면

CSS Grid는 엑셀 표처럼 행과 열을 먼저 그어 두고 아이템을 칸에 넣는 레이아웃이에요. 가로와 세로를 함께 정하니 헤더, 사이드바, 본문 같은 페이지 뼈대를 짜기 좋아요.

비유가 깨지는 곳 엑셀과 달리 칸 크기를 fr로 주면 전체가 아니라 남은 공간을 나눠 가져요. 넘친 아이템은 암시적 트랙을 만들고, 여러 아이템을 같은 칸에 넣어 겹쳐 쌓을 수도 있어요.

행과 열을 동시에 정의해 아이템을 배치하는 2차원 레이아웃 방식. 컨테이너가 트랙(Track, 행·열)의 크기를 정하고 아이템은 그 칸에 들어간다.

트랙 정의

  • grid-template-columns·grid-template-rows로 트랙을 만든다. 고정 길이, auto(콘텐츠 크기), fr(fraction, 남은 공간의 몫)을 섞어 쓸 수 있다. fr은 전체가 아니라 남은 공간을 나눈다
  • gap(row-gap, column-gap)으로 트랙 사이 간격. fr 단위는 쓸 수 없다
  • repeat(3, 1fr)로 반복, minmax(100px, auto)로 최소·최대 크기
  • 명시적으로 정의하지 않은 줄에 아이템이 넘치면 암시적 트랙(Implicit Track)이 생긴다. 그 크기는 grid-auto-rows·grid-auto-columns로 정한다
/* 들어가는 만큼 열을 만들고 남은 공간은 나눠 갖기 */
.cards {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: 20px;
}

배치

  • 라인 번호(Grid Line): 라인은 1부터 센다. grid-column: 1 / 3은 1번 라인부터 3번 라인까지(두 칸). -1은 명시적 그리드의 마지막 라인이다. span 2처럼 칸 수로도 쓴다
  • 영역 이름(Grid Area): grid-template-areas로 레이아웃을 그림처럼 적는다. 같은 이름을 반복하면 칸이 합쳐지고, 빈칸은 .으로 둔다. 영역은 반드시 직사각형이어야 한다. CSS만 봐도 배치가 보여서 반응형에서 미디어 쿼리(Media Query)마다 영역만 바꾸기 좋다
body { grid-template-areas: "header" "nav" "main" "footer"; }
@media (min-width: 40em) {
  body {
    grid-template-columns: 12em 1fr;
    grid-template-areas: "header header" "nav main" "nav footer";
  }
}
header { grid-area: header; }
  • 겹쳐 쌓기: 여러 아이템에 grid-area: 1 / 1을 주면 같은 칸에 겹친다. position: absolute 없이 겹치는 레이아웃을 만들 수 있다

Flexbox와 언제 무엇을 쓸지는 Flexbox와 Grid 비교, 가운데 정렬은 CSS 가운데 정렬 참고.

출처: MDN — CSS grid layout

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • CSS 박스 모델

    브라우저는 모든 요소를 사각형 상자로 보고, 그 상자를 안쪽부터 콘텐츠(content) → 안쪽 여백(padding) → 테두리(border) → 바깥 여백(margin) 네 겹으로 계산한다. 레이아웃에서 요소가 차지하는 크기와 요소 사이 간격이 모두 이 네 겹에서 나온다.

  • 비율을 유지하는 박스

    너비가 바뀌어도 가로세로 비율(예: 16:9)을 지키는 상자. 지금은 aspect-ratio 속성 한 줄이면 되고, 그 전에는 퍼센트 padding을 이용한 트릭을 썼다. 임베드 동영상(iframe)을 반응형으로 만들 때 주로 쓴다.

  • CSS @layer

    CSS 규칙을 이름 붙인 묶음(레이어)으로 나누고, 묶음 사이의 우선순위를 명시적으로 정하는 기능. CSS Cascade Level 5 명세에서 캐스케이드에 새 단계로 들어왔고, 명시도보다 먼저 평가된다.

  • Tailwind CSS

    flex, px-4, text-sm처럼 속성 하나를 담은 유틸리티 클래스(Utility Class)를 마크업에 조합해 스타일을 입히는 CSS 프레임워크. 빌드할 때 소스를 훑어 실제로 쓰인 클래스의 CSS만 만들어 내는 빌드 도구이고, 런타임에 돌아가는 JS(JavaScript)는 없다.

  • CSS 명시도

    캐스케이드에서 레이어까지 비겼을 때, 선택자가 요소를 얼마나 구체적으로 가리키는지로 승부를 내는 점수. (A, B, C) 세 자리로 매기고 앞자리부터 비교한다.

보기 옵션