Grid

맨 위에 헤더, 왼쪽에 사이드바, 중앙에 메인 콘텐츠 영역, 하단에 푸터가 있는 페이지가 있다고 생각해 보세요. 컨테이너를 겹겹이 중첩시키고 각각을 제자리에 밀어내는 방식으로 배치할 수 있지만, 레이아웃을 변경해야 하는 날이 오면 대부분 제대로 작동하지 않습니다. CSS grid는 정확히 이런 문제를 해결하기 위해 만들어졌습니다. 행과 열을 동시에 페이지를 배치하는 것입니다. 레이아웃을 트랙 집합으로 설명할 수 있으면, 래퍼와 float에서 반복적인 작업의 대부분이 사라집니다.
Grid 컨테이너
display: grid를 요소에 지정하여 grid로 변환합니다. 그 요소는 **grid 컨테이너**가 되고, 직접 자식들은 사용자가 정의하는 grid에 맞추는 항목이 됩니다. display: grid만으로는 많이 하지 못하므로, 원하는 열과 행의 개수와 각각의 크기를 지정해야 합니다.
grid-template-columns로 열을 설명하고 grid-template-rows로 행을 설명합니다. 목록의 각 값은 하나의 트랙이고, 트랙은 하나의 열 또는 행입니다.
.layout {
display: grid;
grid-template-columns: 200px 1fr; /* 두 개의 열: 고정된 열, 그 다음 나머지 */
grid-template-rows: 80px 400px; /* 두 개의 행: 짧은 행, 그 다음 높은 행 */
}display: grid를 추가하면 grid 컨테이너가 되고, 직접 자식들이 항목으로 내부에 앉습니다. 그 다음 grid-template-columns와 grid-template-rows로 원하는 열과 행의 개수를 지정합니다. 트랙당 하나의 값입니다. 해당 트랙을 정의하기 전까지는 아무것도 정렬되지 않으므로, 항상 첫 번째 단계입니다. 유연한 트랙
고정 픽셀 열은 괜찮지만, 대부분의 레이아웃은 공간을 균등하게 공유하고 화면에 따라 커지는 열을 원합니다. 그것이 **fr 단위**가 하는 일입니다. 하나의 fr은 남은 공간의 한 몫을 의미하므로, 각각 1fr인 세 개의 열은 컨테이너의 1/3씩 차지합니다.
.gallery {
display: grid;
grid-template-columns: 1fr 1fr 1fr; /* 세 개의 같은 크기 열 */
}1fr을 세 번 입력하는 것은 지루하므로, repeat()로 자동으로 작성할 수 있습니다. 그리고 gap은 트랙 사이의 공간을 설정하므로 모든 항목에 마진을 설정할 필요가 없습니다.
.gallery {
display: grid;
grid-template-columns: repeat(3, 1fr); /* 같은 세 개의 열 */
gap: 16px; /* 행과 열 사이의 공간 */
}fr은 남은 공간의 한 몫이므로, 1fr 1fr 1fr은 세 개의 같은 크기 열을 제공합니다. repeat(3, 1fr)을 사용하여 같은 값을 반복해서 입력하지 마세요. 그리고 트랙 사이의 공간에 gap을 사용합니다. fr이 제 머리에 들어왔을 때, 절대 맞지 않는 백분율을 더 이상 찾지 않아도 됩니다. 항목 배치
기본적으로 각 항목은 다음 여유 셀로 떨어지며, 셀당 하나씩, 순서대로 떨어집니다. 항목이 하나 이상의 셀을 차지하게 하려면 grid-column과 grid-row로 지정합니다. 트랙 사이의 선은 1부터 시작해서 번호가 매겨지므로, grid-column: 1 / 3은 "선 1에서 시작하여 선 3에서 끝남"을 의미하며, 두 개의 열을 커버합니다.
.featured {
grid-column: 1 / 3; /* 열 선 1에서 선 3까지, 두 개 열 너비 */
}선을 세지 않으려면, span은 항목이 착지한 위치에서 몇 개의 셀을 커버할지 말합니다.
.featured {
grid-column: span 2; /* 두 개의 열을 커버, 이 항목이 앉는 위치에서 시작 */
}grid-column 또는 grid-row로 하나를 셀에 걸쳐 늘입니다. 선 번호는 1부터 시작하므로, grid-column: 1 / 3은 두 개의 열을 커버합니다. 또는 선을 세지 않으려면 span 2를 사용합니다. 단일 영역의 이름도 지정하기 전에 대부분의 레이아웃을 구축하기에는 충분합니다. 미디어 쿼리 없는 반응형 그리드
카드 행은 넓은 화면에서 3개씩, 태블릿에서 2개씩, 휴대폰에서 1개씩 표시되어야 합니다. Grid만으로 할 수 있습니다. 중단점을 작성할 필요가 없습니다. 비결은 한 줄입니다.
.cards {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 16px;
}안에서 밖으로 읽으세요. minmax(200px, 1fr)은 각 열이 최소 200px이고 최대 공간의 한 몫을 의미합니다. auto-fit은 그 열이 컨테이너 너비에 맞는 만큼 많이 맞춥니다. 넓은 화면, 더 많은 열이 맞음. 좁은 화면, 더 적은 열이 맞고, 카드는 자동으로 다시 흐릅니다.
repeat(auto-fit, minmax(200px, 1fr))은 카드를 자동으로 다시 흐르게 하며, 중단점이 필요하지 않습니다. 각 열은 최소 200px이고 최대 공간의 한 몫입니다. auto-fit은 맞는 만큼 많이 팩합니다. 200px을 변경하면 한 줄에 앉는 카드 개수를 변경합니다. 
