그리드 레이아웃 요약, 함수, 단위 - by. UXKM

  • Publishing
  • CSS
  • CSS 고급
  • 그리드 레이아웃 요약, 함수, 단위
요약 설명

CSS Grid는 웹 페이지 컨텐츠를 행과 열로 나눌 수 있는 2차원 레이아웃 시스템입니다.
display: grid 또는 display: inline-grid로 설정한 요소가 그리드 컨테이너가 되며, 그 안에 포함된 자식 요소들이 그리드 아이템이 됩니다.

flex는 1차원 레이아웃(행 또는 열)을 다루지만, grid는 2차원 레이아웃(행과 열)을 다룹니다.
복잡한 레이아웃을 구현하는 데 유용하며, 브라우저 대부분이 완벽하게 지원하고 있습니다.

요약 설명

플랙스박스는 콘텐츠에 초점을 맞추고, 그리드는 레이아웃을 먼저 고려합니다.

그리드 요약설명

  1. grid container : 전체 그리드 레이아웃을 감싸는 역할을 수행합니다. display: grid | inline-grid; 속성을 통해 지정할 수 있습니다.
  2. grid item : grid container에 속해있는 하위 DOM 요소를 뜻합니다.
  3. grid track : 그리드 레이아웃에 존재하는 행 또는 열을 의미합니다. grid track의 개수는 명시적으로 지정할 수도, 암묵적으로 늘어나게 할 수도 있습니다.
  4. grid line : grid track을 구분하는 선을 의미합니다. 선의 번호는 위에서 아래로(↓), 왼쪽에서 오른쪽으로(→) 매겨집니다. 그리드 라인의 번호는 1부터 시작된다는 점을 주의해야 합니다.
  5. grid cell : 그리드 레이아웃에서 가장 작은 단위 요소이며, 테이블의 셀과 유사합니다.
  6. grid area : 다수의 grid cell로 이루어진 영역을 뜻합니다. grid area는 항상 사각형의 모양을 가져야 합니다. (ㄴ자, ㄱ자 형태 불가능)
display: grid;
display: grid

CSS3 Grid 모듈 속성을 컨테이너, 아이템 별로 정리

  1. 그리드 컨테이너(grid container)

    display : 그리드 컨테이너를 지정합니다.

    grid-template-rows : 행의 크기를 정의합니다.

    grid-template-columns : 열의 크기를 정의합니다.

    grid-template-areas : 영역 이름을 사용하여 레이아웃을 정의합니다.

    grid-template : 행, 열, 영역을 한 번에 정의합니다.

    row-gap : 행 사이 간격을 설정합니다.

    column-gap : 열 사이 간격을 설정합니다.

    gap : 행과 열 사이 간격을 동시에 설정합니다.

    justify-items : 행 축에서 아이템을 정렬합니다.

    align-items : 열 축에서 아이템을 정렬합니다.

    justify-content : 행 축에서 그리드를 정렬합니다.

    align-content : 열 축에서 그리드를 정렬합니다.

    grid-auto-rows : 암시적 행의 크기를 설정합니다.

    grid-auto-columns : 암시적 열의 크기를 설정합니다.

    grid-auto-flow : 자동 배치 방향을 설정합니다.

    grid : 그리드 관련 속성을 한 번에 설정합니다.

  2. 그리드 아이템(grid item)

    grid-row-start : 행 시작 위치를 지정합니다.

    grid-row-end : 행 끝 위치를 지정합니다.

    grid-column-start : 열 시작 위치를 지정합니다.

    grid-column-end : 열 끝 위치를 지정합니다.

    grid-row : 행 시작과 끝을 한 번에 지정합니다.

    grid-column : 열 시작과 끝을 한 번에 지정합니다.

    grid-area : 영역 이름 또는 위치를 지정합니다.

    justify-self : 행 축에서 개별 아이템을 정렬합니다.

    align-self : 열 축에서 개별 아이템을 정렬합니다.

플랙스박스(flexible box) 와 그리드(grid)의 차이점

  1. 플랙스박스 : 레이아웃을 조정할 때 오직 가로 행 혹은 세로 열만 고려하여 작업할 때 사용합니다.
  2. 그리드 : 레이아웃을 조정할 때 가로 행과 세로 열 모두를 염두에 두고 작업할 때 사용합니다.
[ grid vs flex ]
grid vs flex

grid에서 사용되는 주요 용어 정리

그리드에서 사용하는 주요 용어에 대해서 설명합니다.

grid

HTML 요소에 display 속성 값으로 grid를 설정하면 그리드 컨테이너가 됩니다.
그리드 컨테이너는 행(rows)과 열(columns)을 가지며, 그리드 아이템을 배치할 수 있습니다.

[ grid ]
grid

line

선(line)은 그리드의 행/열을 구분하는 선을 의미합니다.
각 선은 라인 번호를 가지며, 그리드 아이템을 배치하는 기준으로 사용됩니다.

[ line ]
line

track

트랙(track)은 그리드 라인 사이의 행 또는 열 공간을 의미합니다.

[ track ]
track

cell

셀(cell)은 4개의 그리드 라인이 묶여 그려지는 가장 작은 단위입니다.

[ cell ]
cell

area

영역(area)은 하나 이상의 셀로 이루어진 영역입니다.
고유한 식별자를 가지며, 식별자를 통해 요소를 배치할 수 있습니다.

[ area ]
cell

gutters

그리드 거터는 행 또는 열 사이 간격(gap)을 말합니다.
gap(row, column 동시 선언), row-gap, column-gap 속성으로 제어합니다.

[ gutters ]
gutters

grid functions

그리드에서 사용하는 주요 용어에 대해서 설명합니다.

repeat

repeat() 함수는 행/열의 크기 정의를 반복합니다.
첫 번째 인자는 반복 횟수, 두 번째 인자는 행/열의 크기 정의를 사용하며, grid-template-rowsgrid-template-columns에서 사용합니다.

W3C Flexible Lengths: the fr unit 참조

코드 예제

9컬럼 그리드 코드 예제

12컬럼 그리드 코드 예제

[ repeat function ]
repeat function

minmax

minmax() 함수는 행/열의 최소/최대 크기를 정의합니다.
첫 번째 인수는 최솟값, 두 번째 인수는 최댓값이며, grid-template-rows, grid-template-columns, grid-auto-rows, grid-auto-columns에서 사용합니다.

코드 예제

[ minmax function ]
minmax function

fit-content

fit-content() 함수는 행/열의 크기를 그리드 아이템의 내용 크기에 맞춥니다.
내용의 최대 크기를 인수로 사용하며, minmax(auto, max-content)와 유사합니다.

코드 예제

[ grid-template-columns: fit-content(300px) fit-content(300px) 1fr; ]
grid-template-columns: fit-content(300px) fit-content(300px) 1fr;

grid units

그리드에서 사용하는 주요 단위들에 대해서 설명합니다.

fr

fr(fractional unit)은 사용 가능한 공간에 대한 비율을 의미합니다.
그리드 컨테이너의 여유 공간을 비율로 나눠 설정하며, 퍼센트(%) 단위와 달리 길이가 아니므로 calc() 함수에서 다른 값과 함께 처리할 수 없습니다.

코드 예제

[ fr(fractional unit) 사용 예시 ]
fr(fractional unit) 사용 예시

min-content

그리드 아이템이 포함하는 내용의 최소 크기를 의미합니다.
한글을 사용할 경우 word-break: keep-all;을 선언하면 정상적으로 작동합니다.

코드 예제

[ 한글을 사용하는 경우 word-break: keep-all;를 설정 ]
한글을 사용하는 경우 word-break: keep-all;를 설정

max-content

그리드 아이템이 포함하는 내용의 최대 크기를 의미합니다.

코드 예제

[ min-content / max-content ]
min-content / max-content

auto-fill, auto-fit

아이템의 개수를 알 수 없을 때 auto-fit, auto-fill을 사용합니다.
repeat() 함수와 함께 사용하며, 행/열의 개수를 자동으로 조정합니다. 반응형 그리드에 유용합니다.

[ auto-fill & auto-fit ]
auto-fill과 auto-fit

코드 예제

[ auto-fill 유/무의 차이 ]
auto-fill 유/무의 차이

auto-fill과 auto-fit의 차이

auto-fillauto-fit의 차이점은 그리드 컨테이너가 하나의 행/열(Track)에 모든 아이템을 수용하고 남는 공간이 있을 때 발생합니다.
auto-fill은 남는 공간(빈 트랙)을 그대로 유지하고, auto-fit은 남는 공간을 축소합니다.

자동 채우기(auto-fill)

채움(fill)은 반복 횟수만큼 계산하여 처리하지만 정해진 수 이상은 처리하지 않습니다.

자동 채우기(auto-fit)

맞춤(fit)은 채움과 유사하게 작동하지만, 빈 트랙이 존재할 경우 빈 공간을 나눠 맞춥니다.

[ auto-fillauto-fit의 차이 ]
auto-fill과 auto-fit 비교