/*HTML*/
<div class="container">
<div class="box">1</div>
<div class="box">2</div>
<div class="box">3</div>
<div class="box">4</div>
<div class="box">5</div>
<div class="box">6</div>
<div class="box">7</div>
<div class="box">8</div>
<div class="box">9</div>
<div class="box">10</div>
<div class="box">11</div>
<div class="box">12</div>
</div>
/*css*/
.container {
display: grid;
grid-template-columns: 100px 200px 300px;
grid-template-rows: 200px 200px 200px 200px;
column-gap: 10px;
row-gap: 10px;
}
.box {
font-size: 40px;
background-color: rosybrown;
border: 1px solid black;
}
: 사용가능한 공간을, 비율로 나눈다.
: 크기를 특정 사이즈로 지정하는게 아니라, fr로 설정하여 사용가능한 공간 중 그 비율로 길이를 갖게됨.
.container {
display: grid;
gap: 10px;
* grid-template-columns: 100px 200px 300px;
=> 대체 : grid-template-columns: 1fr 2fr 3fr;
* grid-template-rows: 200px 200px 200px 200px;
=> 대체 : grid-template-rows: 1fr 1fr 1fr 1fr;
}
grid-template-columns: 100px 100px 100px 100px;
=>대체: grid-template-columns : repeat(4, 100px);
grid-template-rows: 200px 200px 200px 200px;
=>대체: grid-template-rows : repeat(4, 200px);
1) column-gap: 10px; - 열과 열 사이의 간격
2) row-gap: 10px; - 행과 행 사이의 간격
3) gap: 10px; - 열과열, 행과행 사이의 간격 한번에 설정
grid-column와 grid-row 모두를 입력하는게 너무 많은경우, 이 속성을 이용하여 줄일 수 있습니다.
사용형식
grid-area: grid-row-start / grid-column-start /
grid-row-end / grid-column-end;
/*html*/
<div id="gridContainer">
<div class="header">header</div>
<div class="content">content</div>
<div class="nav">nav</div>
<div class="footer">footer</div>
</div>
/*css*/
#gridContainer {
display: grid;
grid-template-columns: repeat(4, 200px);
grid-template-rows: repeat(4, 200px);
}
.header {
background-color: brown;
/* <방법1. grid-column-start, grid-column-end > */
grid-column-start: 1;
grid-column-end: 5;
/* <방법2-1. grid-column: start / end > 양수번호 사용 */
grid-column: 1 / 5;
/* <방법2-2. grid-column: start / end > 음수번호 사용*/
grid-column: 1 / -1;
/* <방법3 grid-column: 시작 라인번호 / span cell수 > */
grid-column: span 4;
/* <방법4 grid-area > */
grid-area: 1 / 1 / 2 / -1;
}
.content {
background-color: yellow;
/* <방법1. grid-column-start, grid-column-end > */
grid-column-start: 1;
grid-column-end: 3;
grid-row-start: 2;
grid-row-end: 4;
/* <방법2-1. grid-column: start / end > 양수번호 사용 */
grid-column: 1/3;
grid-row: 2/4;
/* <방법2-2. grid-column: start / end > 음수번호 사용*/
grid-column: 1/-3;
grid-row: 2/-2;
/* <방법3 grid-column: 시작 라인번호 / span cell수 > */
grid-column: span 2;
grid-row: span 2;
/* <방법4 grid-area > */
grid-area: 2 / 1 / 4 / -3;
}
.nav {
background-color: green;
/* <방법1. grid-column-start, grid-column-end > */
grid-column-start: 4;
grid-column-end: 5;
grid-row-start: 2;
grid-row-end: 4;
/* <방법2-1. grid-column: start / end > 양수번호 사용 */
grid-row: 2/4;
grid-column: 4/5;
/* <방법2-2 grid-column: start / end > 음수번호 사용*/
grid-row: 2/-2;
grid-column: 4/-1;
/* <방법3 grid-column: 시작 라인번호 / span cell수 > */
grid-column: 4 / span 1;
grid-row: 2 / span 2;
/* <방법4 grid-area > */
grid-area: 2 / -1 / 4 / -2;
}
.footer {
background-color: darkblue;
/* <방법1. grid-column-start, grid-column-end > */
grid-column-start: 1;
grid-column-end: 5;
/* <방법2-1. grid-column: start / end > 양수번호 사용 */
grid-column: 1/5;
/* <방법2-2. grid-column: start / end > 음수번호 사용*/
grid-column: 1/-1;
/* <방법3 grid-column: 시작 라인번호 / span cell수 > */
grid-column: span 4;
/* <방법4 grid-area > */
grid-area: -1 / 1 / -2 / -1;
}
1) grid-template-columns, grid-template-rows따로 지정하고
2) 자식요소인 각 item에 grid-area로 이름 설정 후,
부모요소에서 grid-template-areas로 사용함.
기능1. grid-template-areas의 shortcut.
기능2. 행,열의 길이 설정
grid-template: 50% 50% / 200px;
: 각각 50% 인 두개의 행(row)과 200px 너비의 한개의 열(column)의 그리드를 생성합니다.
grid-template: 100px 150px /200px;
: 첫번째 행은 100px 두번째 행은 150px, 열 전체는 200px인 그리드 생성.
/* html */
<div class="grid">
<div class="header">header</div>
<div class="content">content</div>
<div class="nav">nav</div>
<div class="footer">footer</div>
</div>
/* css */
.grid {
display: grid;
gap: 10px;
height: 50vh;
font-size: 30px;
/* 방법1 */
grid-template-columns: 2fr 1fr 1fr 1fr;
grid-template-rows: repeat(5, 1fr);
grid-template-areas:
'hd hd hd hd'
'cnt cnt . nav'
'cnt cnt . nav'
'cnt cnt . nav'
'ft ft ft ft';
/* 방법2 */
grid-template:
'hd hd hd hd' 1fr
'cnt cnt . nav' 1fr
'cnt cnt . nav' 1fr
'cnt cnt . nav' 1fr
'ft ft ft ft' 1fr
/ 2fr 1fr 1fr 1fr;
}
.header {
background-color: darkred;
grid-area: hd;
}
.content {
background-color: yellow;
grid-area: cnt;
}
.nav {
background-color: green;
grid-area: nav;
}
.footer {
background-color: darkblue;
grid-area: ft;
}