Grid는
flex
와 같이 요소의레이아웃
을 설정하는 속성입니다.flex
는주축
에서의 레이아웃을1차원
으로 설정하고,grid
는주축
과교차축
모두2차원
으로 설정합니다.
격자형 구조의 레이아웃을 만들기 위해table
을 사용하기도 하는데table
은 표의 형태로 만들 때 사용해야하고, 격자형은grid
를 만들어 사용해야 합니다.
rows
: 가로축columns
: 세로축gutters
: 내부 아이템들 사이의 남는 부분grid
는 컨테이너
내부의 아이템
에는 grid
속성을 주고, 컨테이너
자체에 인라인
속성을 주어 별도로 정렬할 수 있습니다.컨테이너
를 내부적으로 어떻게 배치할것인지, 속성값을 나열하여 설정할 수 있습니다.px
단위로 실제 수치를 입력할 수 있고, fr
으로 비율별로 설정할 수 있습니다.repeat
을 사용하여 원하는 속성값을 반복할 수 있습니다.grid-templates-columns: 1fr 1fr 1fr
= grid-templates-columns: repeat(3, 1fr)
grid-area
속성을 활용하여 각 아이템
들에 이름을 부여하여, 직관적으로 grid
구조를 설정할 수 있습니다..container {
display: grid;
grid-template-columns: repeat(5, 1fr);
grid-template-rows: repeat(3, 1fr);
grid-template-areas:
"hd hd hd hd hd"
". mn mn mn sb"
"ft ft ft ft ft";
}
.header {
grid-area: hd;
}
.main {
grid-area: mn;
}
.sidebar {
grid-area: sb;
}
.footer {
grid-area: ft;
}
row
별로 ""
내에 구역별로 grid-area
명을 표기합니다.grid-area
명 대신 .
을 넣으면 빈 공간으로 구분합니다.아이템
사이에 존재하는 gutter
의 너비
와 높이
를 설정할 수 있습니다.grid
의 rows
와 columns
를 컨테이너
의 크기에 맞게 명시적
으로 설정했는데, 구역을 설정하지 못한 아이템
이 있거나 추가될 수 있습니다. 그런 경우에 추가된 아이템
의 구역을 암시적
으로 설정할 수 있습니다.grid-auto-rows
에도 grid-template-rows
와 같은 값을 설정하면 새로운 아이템
도 같은 크기의 구역을 가질 수 있습니다.grid
의 주축
을 설정할 수 있는 속성입니다. 기본값은 row
입니다..container > div:nth-child(2) {
grid-column: span 3;
}
grid-column
속성은 특정 아이템의 구역을 설정할 수 있는데, 2번째 아이템이 3칸을 차지하여 1번째 아이템 옆의 공간이 비었습니다.dense
를 추가해서 할 수 있습니다..container {
grid-auto-flow: row dense;
}
grid-template,rows, grid-template-columns, grid-template-areas, grid-auto-rows, grid-auto-columns, grid-auto-flow
속성을 한번에 사용할 수 있는 단축
속성입니다./
를 기준으로 row
의 속성을 앞쪽에 표기하고, column
의 속성을 뒤쪽에 표기합니다.auto-flow
속성은 해당하는 값 쪽에 같이 표기합니다.컨테이너
내부의 아이템
이 차지하지 않는 공간이 생겼을 때, 아이템
들을 정렬하기 위해 사용합니다.flex
에서 사용했던 속성들처럼 justify-content
는 주축을 기준으로, align-content
는 교차축을 기준으로 정렬합니다..container {
justify-content: space-between;
align-content: space-between;
}
space-between
이면, 가로와 세로의 끝에서 동일한 영역을 구분하게 됩니다.content
는 아이템
의 구역을 정렬하기 위해 사용하는 속성이라면, items
는 아이템
내부의 공간을 정렬하기 위해 사용하는 속성입니다.justify-items, align-items
의 값을 모두 center
로 설정했습니다.stretch
여서, 값을 변경하면 지정한 크기나 콘텐츠의 크기만큼만 차지하게 됩니다.justify-self, align-self
속성을 사용할 수 있습니다.start, end
의 값을 같이 표기하는 단축 속성입니다.grid-row: 1 / 4
로 아이템1이 세로 한 줄을 전부 차지했습니다. end
의 값이 4
인 이유는, 값을 영역으로 구분하지 않고 이미지에 표시된 선의 숫자로 구분하기 때문입니다. -
값은 뒤부터 순차대로 정해져서, grid-row: 1 / -1
도 같은 효과를 낼 수 있습니다. 음수값은 명시적으로 정해진 값에만 생기고, 암시적으로 생긴 grid-auto-rows, grid-auto-columns
의 경우에는 생기지 않습니다.선
의 위치로 구분하는 것이 아닌, 영역의 크기만큼을 지정하고 싶은 경우에는 값에 span
을 붙일 수 있습니다. gid-row: 1 / span 3
도 같은 효과를 낼 수 있습니다.grid-row, grid-column
을 한번에 사용할 수 있는 단축 속성입니다.grid-row-start / grid-column-start / grid-row-end / grid-column-end
: 값은 이 순서대로 작성되기 때문에 row-end
보다 column-start
값을 먼저 표기하는 것을 유의해야 합니다.이름
으로 사용되어 2가지 기능으로 동작합니다.flexbox
에서 사용되었던 것처럼, 아이템의 순서를 지정할 수 있는 속성입니다.0
으로, 별도의 값을 지정하지 않으면 마크업 순서대로 표시됩니다.fr(fraction)
은 아이템의 공간을 비율로 나누어 구분합니다. px
과 같은 절대값과 같이 사용할 수도 있는데, 그런 경우에는 절대값에 공간을 우선적으로 부여하고 나머지 공간을 비율로 나눕니다.min-content
는 아이템의 콘텐츠 중 가장 긴 단어의 크기만큼 공간을 차지하고, max-content
는 모든 콘텐츠를 모두 한 줄에 보여줄 수 있을만큼 공간을 차지합니다.grid
속성을 좀 더 반응형
으로 만들어, 컨테이너
내부에 아이템
이 차지하고 있지 않은 영역을 채우기 위한 속성입니다.1fr
로 column
의 값을 균등하게 배분하고 있습니다. 이 상태로 화면의 크기를 늘리게 되면 아이템의 크기도 같이 늘어납니다.100px
을 지정해줍니다. 그랬더니 첫번째 줄에 들어갈 공간이 있는데도 공간을 사용하고 있지 않습니다.auto-fill
속성을 사용하여 공간을 차지할 수 있을만큼 아이템을 1번째 줄로 올릴 수 있습니다.grid-column-templates: repeat(auto-fill, 100px)
minmax
속성을 같이 사용하면 조금 더 자연스럽게 남은 공간도 채워줄 수 있습니다.grid-template-columns: repeat(auto-fill, minmax(100px, 1fr))
그럼에도 불구하고, 컨테이너
가 모든 아이템
의 영역의 크기의 합을 초과하면 공간이 빌 수 있습니다.
그런 경우에는, auto-fit
속성을 사용하여 남는 공간마저 모두 채워줄 수 있습니다.