Grid
CSS Grid - Flexible Box는 단순한 1차원 레이아웃을 위한 기능이지만 Grid는 2차원의 레이아웃 시스템을 제공, Flex처럼 Container와 Item이라는 두가지 개념이 있음
.container { grid-template-rows: 100px 200px; grid-template-columns: 100px 200px; } /*repeat*/ .container { width: 400px; display: grid; grid-template-rows: repeat(3, 100px); grid-template-columns: repeat(3, 1fr); }
/* 동시에 각 라인의 이름도 정의할 수 있습니다. */ .container { grid-template-rows: [first] 100px [second] 200px [third]; } /* 라인에 중복된 이름을 지정할 수 있습니다. */ .container { grid-template-rows: [row1-start] 100px [row1-end row2-start] 200px [row2-end]; } .container { grid-template-columns: repeat(4, 100px 200px 50px); /* grid-template-columns: 100px 200px 50px 100px 200px 50px 100px 200px 50px 100px 200px 50px; */ }
.container { display: grid; grid-template-rows: repeat(3, 100px); grid-template-columns: repeat(3, 1fr); grid-template-areas: "header header header" "main main aside" "footer footer footer"; } header { grid-area: header; } main { grid-area: main; } aside { grid-area: aside; } footer { grid-area: footer; }
.container { display: grid; grid-template-rows: repeat(4, 100px); grid-template-columns: repeat(3, 1fr); grid-template-areas: "header header header" "main . ." "main . aside" "footer footer footer"; } .container { display: grid; grid-template: "header header header" 80px "main main aside" 350px "footer footer footer" 130px / 2fr 100px 1fr; }
.container { row-gap: 30px; column-gap: 15px; /*같은거*/ gap: 30px 15px; }
.container { grid: <grid-template>; grid: <grid-template-rows> / <grid-template-columns>; grid: <grid-template-rows> / <grid-auto-flow> <grid-auto-columns>; grid: <grid-auto-flow> <grid-auto-rows> / <grid-template-columns>; } .container { grid: "header header header" 80px "main main aside" 350px "footer footer footer" 130px / 2fr 100px 1fr; } .container { grid-template: "header header header" 80px "main main aside" 350px "footer footer footer" 130px / 2fr 100px 1fr; } .container { grid: 100px 200px / 1fr 2fr; } .container { grid-template-rows: 100px 200px; grid-template-columns: 1fr 2fr; } .container { grid: 100px 100px / auto-flow 150px; } .container { grid-template-row: 100px 100px; grid-auto-flow: column; grid-auto-columns: 150px; } .container { grid: auto-flow dense 150px / 100px 100px; } .container { grid-template-columns: 100px 100px; grid-auto-flow: row dense; grid-auto-rows: 150px; }
.item:nth-child(1){ grid-column: 1 / 3; /*확장 3만큼*/ grid-row: 1 / span 3; }
.item{ grid-row: 2 / 3; grid-column: span 2 / -1; } .item{ /*<grid-row-start> / <grid-column-start> / <grid-row-end> / <grid-column-end> */ grid-area: 2 / span 2 / 3 / -1; }
align-self - 단일 그리드 아이템을 수직 정렬, 그리드 아이템의 세로 너비가 자신이 속한 그리드 행의 크기보다 작아야함
justify-self - 단일 그리드 아이템을 수평 정렬, 그리드 아이템의 가로 너비가 자신이 속한 그리드 열의 크기보다 작아야 함
order - 그리드 아이템이 자동배치되는 순서를 변경, 숫자가 작을수록 앞서 배치 됨
z-index - 속성을 이용해 아이템이 쌓이는 순서를 변경
Grid Functions - 그리드에서 사용하는 함수들
repeat() - 행/열의 크기 정의를 반복, '반복되는 횟수'와 '행/열의 크기 정의'를 인수로 사용
minmax - 행/열의 '최소/최대 크기/를 정의, 첫 번째 인수는 '최솟값'이고 두 번째 인수는 '최댓값'임, grid-template-rows, grid-template-columns, grid-auto-rows, grid-auto-columns에서 사용
fit-content - 행/열의 크기를 그리드 아이템이 포함하는 내용 크기에 맞춤, '내용의 최대 크기'를 인수로 사용
Grid Units - 그리드에서 사용하는 주요 단위들
fr(fractional unit) - 사용 가능한 공간에 대한 비율
min-content - 그리드 아이템이 조합하는 내용의 최소 크기를 의미(한글일 경우 word-break: keep-all; 써야함)
max-content - 그리드 아이템이 포함하는 내용의 최대 크기
auto-fill, auto-fit - 행열의 개수를 그리드 컨테이너 및 행/열 크기에 맞게 자동으로 조정, repeat()함수와 같이 사용하며 행/열과 아이템 개수가 명확할 필요가 없거나 명확하지 않은 경우 유용(반응형 그리드)
auto-fill과 auto-fit의 차이 - 그리드 컨테이너가 하나의 행/열에 모든 아이템을 수용하고 남는 공간이 있을 때 발생, auto-fill은 남는 공간을 그대로 유지, auto-fit은 남는 공간을 축소
댓글
댓글 쓰기