그리드 레이아웃 가이드, 데모 - by. UXKM

4.5.7. box정렬 가이드

요약 설명

Box 정렬(Alignment)의 일부 동작은 레이아웃 방법에 따라 달라집니다.
CSS Grid / Flexbox의 각 레이아웃 방법에 따라 아이템 정렬이 어떻게 다르게 설정 되는지 비교해봅니다.

4.5.7.1. box 정렬의 핵심 개념

컨테이너 요소는 포함하는 아이템 자식 요소를 정렬할 수 있습니다. 정렬의 유형을 세부적으로 구분하면 다음 3가지로 나눌 수 있습니다.

  1. 위치 정렬 - start, end, center 와 같은 키워드
  2. 기본 정렬 - baseline 키워드와 first/last 수정자(Modifiers)
  3. 분산 정렬 - stretch, space-between, space-around, space-evenly

이러한 키워드 값의 대부분은 문서의 쓰기 모드(Writing modes)와 관련되어 작동합니다.
글의 흐름이 좌 ⟹ 우 방향이라면 그리드 컨테이너의 왼쪽이 start 가 됩니다. 반대로 우 ⟹ 좌 방향이라면 오른쪽이 start가 됩니다.

[ Box 정렬 좌 ⟹ 우 / 우 ⟹ 좌 ]
Box 정렬 좌 ⟹ 우 / 우 ⟹ 좌

4.5.7.2. block / inline 축(axis)

블록과 인라인 축은 다양한 방법으로 사용됩니다.
블록 축은 grid 사양의 컬럼(column) 축으로, flexbox 에서는 교차(cross) 축으로 사용됩니다.
인라인 축은 grid에서 로우(row) 축으로, flexbox에서는 주(main) 축으로 사용됩니다.
grid는 언제나 명시적인 행/열을 가지고 있어 축을 기준으로 하는 정렬에 대해 이해하기 쉽습니다.
하지만 flexbox는 주 축(main axis) 방향이 바뀔 때마다 정렬 기준이 변경된다는 점에 유의해야 합니다.

  1. block 축 (수직)

    grid - column 축

    flexbox - cross 축

  2. inline 축 (수평)

    grid - row 축

    flexbox - main 축

[ Block / Inline 축(Axis) ]
Block / Inline 축(Axis)

4.5.7.3. align-self / align-items

align-* 속성은 블록 축(수직 방향)과 관련된 속성입니다.
grid 레이아웃은 column 축에 해당되며, 명확하게 수직 방향으로만 정렬이 설정됩니다.
반면 flexbox는 flex-direction 속성 설정에 따라 교차 축의 방향이 바뀌기 때문에, 교차 축에 영향을 받는 align-* 속성의 정렬 또한 바뀝니다.

grid와 flex 비교

grid
정렬 컨테이너
Grid 영역(Area)
기본 동작
일정 비율을 가진 아이템을 제외하고는 stretch가 설정된 것처럼 늘어난 형태로 동작합니다.
설정 가능한 값
auto, normal, start, end, center, stretch,
baseline, first-baseline, last-baseline
허용 범위
블록 / 컬럼(column) 축
예시
align-self의 기본 동작은 stretch 입니다.
start값을 설정하면 그리드 컨테이너 블록 축의 시작 부분에 정렬됩니다.
grid align-self / align-items
flex
정렬 컨테이너
아이템이 있는 Flex 라인
기본 동작
stretch 값이 기본 입니다.
설정 가능한 값
auto, normal, flex-start, flex-end, center, stretch,
baseline, first-baseline, last-baseline
허용 범위
블록 / 교차(cross) 축
예시
align-self의 기본 동작은 stretch 입니다. flex-direction 설정 값에 따라 늘어나는 방향이 변경됩니다.
row일 경우 height, column일 경우 width로 설정됩니다.
start 값을 설정하면 교차 축의 시작 부분에 정렬됩니다.
flex align-self / align-items

4.5.7.4. justify-self / justify-items

justify-* 속성은 인라인 축(수평 방향)과 관련된 속성입니다.
grid 레이아웃은 row 축에 해당되며, 명확하게 수 방향으로만 정렬이 설정됩니다. 반면 flexbox 에는 justify-self, justify-items과 같은 속성을 지원하지 않습니다.
개별 아이템을 주 축 방향을 기준으로 정렬하고자 한다면 margin 속성을 사용 합니다.

grid와 flex 비교

grid
정렬 컨테이너
Grid 영역(Area)
기본 동작
일정 비율을 가진 아이템을 제외하고는 stretch가 설정된 것처럼 늘어난 형태로 동작합니다.
설정 가능한 값
auto, normal, start, end, center, stretch,
baseline, first-baseline, last-baseline
허용 범위
인라인 / 행(row) 축
예시
justify-self의 기본 동작은 stretch 입니다.
start값을 설정하면 그리드 컨테이너 인라인 축의 시작 부분에 정렬됩니다.
grid justify-self / justify-items
flex

justify-self 속성은 Flexbox에 적용되지 않습니다.
주 축에 여러 아이템이 존재해 이들 중 하나를 조정할 수 없습니다. 주 축에 콘텐츠를 정렬하고자 한다면 아래 작성된 justify-content 속성을 참고하세요.

인라인 축에 하나의 아이템만 정렬하고자 한다면, margin 속성을 사용해 아이템을 정렬할 수 있습니다.

4.5.7.5. align-content

align-content 속성은 블록 축(수직 방향)과 관련된 속성입니다.
grid 레이아웃은 column 축에 해당되며, 그리드 컨테이너에 여유 공간이 존재할 경우 정렬이 반영됩니다.
flexbox 또한 컨테이너에 여유 공간이 있다면 정렬을 수행할 수 있습니다.

grid와 flex 비교

grid
정렬 컨테이너
Grid 컨테이너(Container)
기본 동작
일정 비율을 가진 아이템을 제외하고는 stretch가 설정된 것처럼 늘어난 형태로 동작합니다.
설정 가능한 값
normal, start, end, center, stretch,
space-between, space-around, space-evenly,
baseline, first baseline, last baseline
허용 범위
블록 / 열(column) 축
요구 조건
그리드 컨테이너의 여유 공간
예시
그리드 트랙 크기가 컨테이너 크기보다 작은 경우, 시작 부분에 정렬됩니다.
space-between 값을 설정하면 블록 축(수직 방향)을 기준으로 공간을 분산 정렬합니다.
grid align-content
flex
정렬 컨테이너
Flex 컨테이너(Container)
기본 동작
stretch 값이 기본 입니다.
설정 가능한 값
normal, flex-start, flex-end, center, stretch,
space-between, space-around, space-evenly,
baseline, first baseline, last baseline
허용 범위
블록 / 교차(cross) 축
요구 조건
컨테이너가 아이템보다 표시할 수 있는 공간이 주어질 경우, 정렬을 사용할 수 있습니다.
예시
align-content 속성은 컨테이너에 여유 공간이 있을 때 공간을 분산 정렬하도록 설정할 수 있습니다.
flex align-content

4.5.7.6. justify-content

grid 레이아웃은 column 축에 해당되며, 그리드 컨테이너에 여유 공간이 존재할 경우 정렬이 반영됩니다.
flexbox 또한 컨테이너에 여유 공간이 있다면 정렬을 수행할 수 있습니다.

grid와 flex 비교

grid
정렬 컨테이너
Grid 컨테이너(Container)
기본 동작
일정 비율을 가진 아이템을 제외하고는 stretch가 설정된 것처럼 늘어난 형태로 동작합니다.
설정 가능한 값
normal, start, end, center, stretch,
space-between, space-around, space-evenly,
baseline, first-baseline, last-baseline
허용 범위
인라인 / 행(row) 축
요구 조건
그리드 컨테이너의 여유 공간
예시
그리드 트랙 크기가 컨테이너 크기보다 작은 경우, 시작 부분에 정렬됩니다.
space-between 값을 설정하면 인라인 축(수평 방향)을 기준으로 공간을 분산 정렬합니다.
grid justify-content
flex
정렬 컨테이너
Flex 컨테이너(Container)
기본 동작
Flexbox 주(main) 축의 기본 값이 flex-start 이기에 잡아 당긴 것처럼 늘어납니다.
설정 가능한 값
normal, flex-start, flex-end, center, stretch,
space-between, space-around, space-evenly,
baseline, first-baseline, last-baseline
허용 범위
인라인 / 주(main) 축
요구 조건
컨테이너가 아이템보다 표시할 수 있는 공간이 주어질 경우, 정렬을 사용할 수 있습니다.
예시
justify-content 속성은 컨테이너에 여유 공간이 있을 때 공간을 분산 정렬하도록 설정할 수 있습니다.
flex justify-content

4.5.8. grid layout demo

grid layout

grid-auto-flow with out dense

grid-auto-flow: dense

grid-based 3-column layout with 2-column option