그리드 레이아웃 부모 속성 part1 - by. UXKM

요약 설명 그리드 레이아웃 - 부모 속성 part 1 에서는
- grid 컨테이너
- grid 템플릿 행/열
- grid 템플릿 영역
- grid 템플릿 속기형
- grid 트랙 크기 자동 설정
- grid 자동 흐름 설정
에 대한 내용을 다루고 있습니다.

4.5.5. 부모 속성(properties for the parent - grid container)

4.5.5.1. grid 컨테이너

그리드 컨테이너는 display 속성을 사용해 설정할 수 있습니다.
설정 값에 따라 블록(block) 그리드와 인라인(inline) 그리드로 설정됩니다. 그리드 컨테이너 요소를 블록 또는 인라인 요소처럼 처리합니다.

display

그리드 컨테이너(container)를 정의합니다.
정의된 컨테이너의 자식 요소들은 자동으로 grid items(아이템)로 정의됩니다.
그리드를 사용하기 위해 컨테이너에 필수로 작성합니다.

  1. grid : block 특성의 grid container를 정의
  2. inline-grid : inline 특성의 grid container를 정의
display: grid & inline-grid
display: grid;

4.5.5.2. grid 템플릿 행/열

공백으로 구분된 값 리스트를 해석하여 그리드 행(row), 열(column)을 설정합니다.
각 값은 트랙 크기를 말합니다.

grid-template-columns / grid-template-rows

공백으로 구분 된 값 목록으로 그리드의 명시적(explicit grids) 열(track) / 행(track)의 크기를 정의합니다.
값은 트랙 크기를 나타내며, 그 사이의 공간은 그리드 선을 나타냅니다.
동시에 라인(line)의 이름도 정의할 수 있습니다.

fr(fraction, 공간 비율) 단위를 사용할 수 있으며, repeat() 함수를 사용할 수 있습니다.

  1. <track-size> : 그리드에서 사용 가능한 공간의 길이 (px, rem, em, %, fr 등)
  2. <line-name> : 사용자가 설정한 임의의 선 이름
트랙 값 사이에 빈 공간을 두면 그리드 선에 양수음수자동으로 할당
트랙 값 사이에 빈 공간을 두면 그리드 선에 양수와 음수가 자동으로 할당
명시적으로 줄 이름을 지정 (아래 줄 이름은 예시)
명시적으로 줄 이름을 지정

grid-template-columns

grid-template-columns: [first] 300px [main] 200px [side] 100px [last];
grid-template-columns: [first] 300px [main] 200px [side] 100px [last];
사용자가 임의로 설정한 선 이름([이름])을 사용할 수도 있습니다.
각 열의 크기를 정의합니다.
동시에 각 라인의 이름도 정의할 수 있습니다.
라인에 중복된 이름을 지정할 수 있습니다.
선 이름을 1개 이상 설정하는 것도 가능합니다. 방법은 [이름-1 이름-2]와 같이 [] 내부에 공백으로 구분된 이름을 추가하면 됩니다.
설정이 반복되는 경우, repeat() 함수를 사용하여 손쉽게 설정할 수 있습니다.
fr 단위를 사용하여 <track-size>를 그리드의 남은 공간 일부를 설정할 수 있습니다.
fr 단위는 고정 값(px, rem 등) 단위가 먼저 계산된 후, 남은 공간을 사용하여 계산 처리됩니다.

만약 1200px 너비의 ‘12컬럼 그리드 템플릿’을 정의한다면 다음과 작성할 수 있습니다.
위 예제에서는 12개의 열(컬럼) 크기를 각각 하나씩 지정하여 관리의 어려움이 있습니다.
repeat() 함수를 사용하면 위 예제를 다음과 같이 간소화 할 수 있습니다.
컬럼을 크기를 fr(fraction, 공간 비율) 단위를 사용해 다음과 같이 비율로 지정할 수도 있습니다.
각 컬럼은 비율에 맞게 출력되기 때문에 컨테이너의 너비가 가변해도 열 크기를 수정할 필요가 없습니다.
repeat() 함수는 2번째 인수를 반복하기 때문에 다음과 같이 활용할 수 있습니다.
트랙 값 사이에 빈 공간을두면 그리드 선에 양수와 음수가 자동으로 할당됩니다. (위 '명시적으로 줄 이름을 지정' 이미지 참조)
라인은 하나 이상의 이름을 가질 수 있습니다. 예를 들어, 두 번째 줄의 이름은 row1-end와 row2-start입니다.
여러 줄이 같은 이름을 공유하는 경우 해당 줄 이름과 개수로 참조 할 수 있습니다.

grid-template-row

grid-template-rows
grid-template-rows
각 행의 크기를 정의합니다.
동시에 각 라인의 이름도 정의할 수 있습니다.
라인에 중복된 이름을 지정할 수 있습니다.
각 라인은 행(row, track)과 열(column, track)의 개수대로 숫자(양수/음수) 라인 이름이 자동으로 지정되어 있어서, 꼭 필요한 경우가 아니면 라인 이름을 정의할 필요가 없습니다.

4.5.5.3. grid 템플릿 영역

grid-area 속성으로 설정된 그리드 영역의 이름을 참조하여, 그리드 템플릿 영역을 설정할 수 있습니다.
그리드 영역 이름을 반복하면 그리드 셀을 병합(merge, span) 합니다. 그리고 마침표(.)는 비어있는 그리드 셀을 말합니다.

grid-template-areas

영역(area) 이름을 참조해 템플릿 생성합니다.

  1. <grid-area-name> : 사용자가 grid-area 속성 값으로 설정한 임의의 그리드 영역 이름
  2. 마침표(.) : 비어있는 그리드 셀
  3. none : 그리드 영역으로 정의되지 않은 셀
다음은 3행 4열 그리드 템플릿 영역 설정 예제입니다.
3행 4열 그리드 템플릿 영역 설정 예제
명시적으로 그리드(explicit grids)를 정의할 때, 그리드 컨테이너에 3개의 속성을 사용해 설정할 수 있습니다.
  1. grid-template-rows
  2. grid-template-columns
  3. grid-template-areas

4.5.5.4. grid 템플릿 속기형

그리드 템플릿 행 / 열 / 영역 이름 설정을 속기형(shorthand)으로 설정 가능합니다.

grid-template

grid-template-xxx의 단축 속성입니다.
grid-template 속성은 grid-template-{rows, columns, areas} 속성을 축약형으로 사용할 수 있도록 합니다.

  1. grid-none : 3가지 설정을 모두 초기 값으로 적용
  2. grid-template-rows / grid-template-columns : 행/열 그리드 템플릿 설정
  3. 라인이름(옵션) 영역이름(필수) 트랙 크기(옵션) 라인이름(옵션)
그리드 행/열 템플릿을 축약형 속성으로 설정한 예
축약형으로 적용된 속성을 개별 속성으로 풀어본 예
행/열 그리드 템플릿에 영역이름 템플릿을 함께 설정 한 예
속기형으로 적용된 속성을 개별 속성으로 풀어본 예
grid-template-areas 속성은 암시적인 그리드 속성을 초기화하지 않습니다.
  1. grid-auto-rows
  2. grid-auto-columns
  3. grid-auto-flow

4.5.5.5. grid 트랙 크기 자동 설정

그리드 행/열 트랙 크기 자동 설정

암시적인 그리드 행/열 트랙 크기를 자동으로 설정합니다.

암시적인 그리드 트랙이란?

사용자가 설정하지 않은 임의의 트랙으로 사용자가 명시적으로 grid-template-rows / grid-template-columns 속성을 설정하지 않은 나머지 그리드 트랙을 가리킵니다.

grid-auto-columns / grid-auto-rows

암시적인(implicit grids) 열(track)/행(track)의 크기를 정의합니다.
자동 생성 된 그리드 트랙의 크기를 지정합니다. (일명 암시 적 그리드 트랙)
그리드에 셀보다 많은 그리드 항목이 있거나 그리드 항목이 명시적 그리드 외부에 배치되면 암시적 트랙이 생성됩니다.

  1. <track-size> : 그리드에서 사용 가능한 단위 (px, rem, em, %, fr 등)
사용자가 명시적으로 열/행 템플릿 속성을 설정하면 그리드 트랙 크기로 적용(2열 2행 그리드)
2열 2행 그리드
개별 그리드 아이템에 열/행 위치를 그리드 라인 기준으로 배치하게 되면 다음과 같이 처리됨

.item-b에 설정한 열 그리드 라인 5~6 배치는 암시적인 열 그리드(grid-auto-columns) 설정에서 정의되지 않은 영역으로, 존재하지 않는 열/행에 배치하기 위해 암시적인 트랙이 자동으로 생성됩니다.
(그림을 자세히 보면 암시적으로 생성된 트랙 크기는 0으로 설정됩니다)

열/행 위치를 그리드 라인 기준으로 배치
자동으로 생성되는 그리드 트랙 크기를 임의의 값으로 설정하고 싶다면 다음과 같이 설정할 수 있습니다.

암시적으로 생성된 그리드 트랙 크기는 60px로 설정됩니다.

자동으로 생성되는 그리드 트랙 크기를 임의의 값으로 설정

4.5.5.6. grid 자동 흐름 설정

그리드에 명시적으로 배치(레이아웃) 되지 않은 아이템이 있을 경우, 자동 배치 알고리즘이 실행되어 자동으로 배치 되도록 설정할 수 있습니다.
속성 값에 따라 자동 배치 알고리즘 작동 방식이 달라집니다.

[속성 값에 따라 자동 배치 알고리즘 작동 방식]
속성 값에 따라 자동 배치 알고리즘 작동 방식

grid-auto-flow

자동 배치 알고리즘 방식을 정의합니다.
기본적으로 항목을 배치 할 때 그리드에 간격이 생성되면 자동 배치 된 그리드 항목이 간격을 채우지 않고 대신 마지막 항목 뒤에 추가됩니다.
dense 키워드를 사용하여 이를 변경할 수 있습니다.
이는 암시적 그리드 알고리즘이 자동 배치 된 항목과의 간격을 채우고 다시 채우고 필요할 때 항목의 순서를 변경하도록 지시합니다.
항목 순서가 중요하지 않은 이미지 갤러리를 만들 때 실제로 유용 할 수 있습니다.

  1. row : 기본값으로 각 행을 차례로 채우고 필요에 따라 새 행을 추가하는 자동 배치 알고리즘 입니다.
  2. column : 각 열을 차례로 채우고 필요에 따라 새 열을 추가하는 자동 배치 알고리즘 입니다.
  3. dense : 배치 중 나중에 크기가 작은 아이템이 존재할 경우, 그리드 영역 앞부분의 남은 공간에 자동 배치하는 알고리즘 입니다.
  4. row dense : 각 행 축을 따라 차례로 배치, 빈 영역 메움.
  5. column dense : 각 열 축을 따라 차례로 배치, 빈 영역 메움.
grid-auto-flow 예제
[위 예제의 결과물]
위 예제의 결과물