2차원 레이아웃 시스템, CSS의 꽃 ...
열과 행을 원하는 만큼 제어하고 커스텀할 수 있다.
1. Grid 설정하기
.father {
display: grid;
grid-template-columns: 100px 200px;
/* 열 넓이를 설정해주기 */
grid-template-rows: 200px 100px;
/* 행 넓이를 설정해주기 */
gap : 10px;
}
.child {
background-color: tomato;
}
엄청 편하다 !!
F12 의 grid inspector를 켜면 훨씬 편하게 작업할 수 있다.
2. Grid Lines
.child:last-child {
background-color: #62cfcf;
grid-column-start: 2;
}
4번 상자가 2번 열로 이동했다.
.child:last-child {
background-color: #62cfcf;
grid-column-start: 2;
grid-column-end: 4;
}
눈물나게 감동적...
.child:first-child {
grid-row-start: 1;
grid-row-end: -1;
}
grid-column
grid-row
를 활용해 한번에 지정해줄 수도 있다..child:last-child {
background-color: #62cfcf;
/* grid-column-start: 2;
grid-column-end: -1; */
grid-column: 2 / -1;
}
.child:first-child {
/* grid-row-start: 1;
grid-row-end: -1; */
grid-row : 1 / -1;
}
grid-template-columns: [cucumber] 100px [pdtato] 200px [banana] 50px [brocoli];
grid-column: potato / brocoli;
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr;
height
값을 설정해주면 된다. display: grid;
height: 100vh;
/* 100vh는 view 의 100% 라는 뜻 */
grid-template-columns: 1fr 1fr 1fr 1fr;
grid-template-rows: 1fr 1fr 1fr;
grid-template-areas:
"header header header header"
"content content content menu"
"content content content menu"
"footer footer footer footer";
감동적으로 나뉘어진다... 직관적이다 !!!
grid-area
header {
background-color: aqua;
grid-area: header;
}
section {
background-color: coral;
grid-area: content;
}
aside {
background-color: forestgreen;
grid-area: menu;
}
footer {
background-color: deeppink;
grid-area: footer;
}
진짜 초.감.동 그자체
grid-template
grid-template:
"a a a a" 1fr
"b b b c" 2fr
"d d d d" 1fr / 1fr 1fr 1fr 1fr;
초감동
이때, child에게 가서
grid-area
를 지정해주는 걸 잊지 말자!!!!
span
.child:first-child {
background-color: khaki;
grid-row: span 2;
}
.child:last-child {
background-color: turquoise;
grid-column: span 2;
}
grid-column: potato / span 2;
.father {
display: grid;
min-height: 50vh;
gap: 10px;
grid-template-columns: repeat(2, 1fr);
grid-template-rows: repeat(2, 1fr);
/* 팁 : 1fr 반복이 지겨울 때 repeat(횟수,1fr) 할 수 있다 */
}
grid-auto-rows
를 사용할 수 있다.grid-auto-rows: 1fr;
-> 아직 생기지 않은 행들의 크기를 정해줄 수 있다.
grid-auto-flow
를 이용하면 열이 추가되도록 할 수 있다.grid-auto-flow: column;
grid-auto-columns : 1fr
을 통해 간격을 고정할 수 있다. justify items
에 대해 알아보자.justify-items: stretch;
align-items: stretch;
justify-items
: 가로 방향의 item 크기를 결정
align-items
: 세로 방향의 item 크기를 결정
place-items
: 세로 가로 (두개 동시에 지정하기)
- stretch : 최대 크기로 늘리기 (width, height가 없어야 함)
- center, start, end : grid내에서 움직이기
justify-self
justify-self
align-self
place-self
align-content
justify-content
place-content
도 있다. (당연히 세로 가로) max-content
로 지정하면 줄바꿈이 일어나지 않게 할 수 있다.grid-template-columns: 1fr max-content 1fr;
반대는 min-content
이며, 최소 단위 (여기선 가장 긴 단어)로 줄이게 된다.
이를 활용해서 창을 줄여도 특정 셀은 줄어들지 않게 할 수 있다.
minmax(min,max)
를 활용해 가운데 셀을 400px 아래로 줄어들지 않게 해보자. grid-template-columns: 1fr minmax(250px,1fr) 1fr;
minmax
는 repeat(3, minmax())
형태로도 사용할 수 있다. grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
auto-fill
과 auto-fit
모두 화면 크기에 맞춰 열의 크기를 늘리거나 줄이거나 한다.
auto-fit
은 화면을 꽉 채우지만, auto-fill
은 지정한 width를 지켜서 열을 최대한 많이 만든다. (열이 비어 있더라도)