— 열(columns) : grid-template-columns
| 행(rows) : grid-template-rows
.container {
display: grid; /* 부모에 그리드 선언 */
grid-template-columns: repeat(5, 1fr); /* 1:1:1:1:1의 비율 */
grid-auto-rows: 150px; /* 열에 맞춰서 150px씩 할당해줘 */
}
만약 그리드 박스 안 콘텐츠의 길이가 다양하다면?
grid-auto-… 사용!
.container {
display: grid;
grid-template-columns: repeat(5, 1fr);
grid-auto-rows: minmax(150px, auto);
/* 최소 150px 유지, 콘텐츠가 많을 경우 콘텐츠에 맞춰 늘어난다. */
}
.container {
display: grid;
grid-template-columns: repeat(5, 1fr);
grid-auto-rows: 150px;
grid(-column/row)-gap: 1rem; /* grid cell 사이의 여백 */
/* column 이나 row, 둘 중 하나만 선택해 여백을 줄 수 있다. */
/* (= padding: 10px;) */
}
그리드 순서?
박스를 어디서부터 어디까지 차지하게 할 지 정할 수 있다.
.item2 {
grid-column-start: 2;
grid-colunm-end: 4;
grid-row-start: 1;
grid-row-end: 3;
}
grid-column: 2/4;
/* (= grid-column: 2 / span 2;) cell 2개를 차지해줘 */
grid-column: 2/-1; /* 끝까지 */
grid-row: 1/3;
좀 더 수월하게 하려면 grid-template-areas를 사용하면 된다.
.image {
width: 100%; /* 부모가 기준 */
height: 100%;
object-fit: cover; /* 사진을 박스 안에 어떻게 들고올 것인지 결정 */
}
.container {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-auto-rows: 150px;
grid-gap: 1rem;
grid-template-areas:
'a a a'
'b c c'
'b c c'
}
.image1 {
grid-area: a;
}
.image2 {
grid-area: b;
}
.image3 {
grid-area: c;
}
이렇게 하면 image1은 a영역 만큼 차지, image2는 b영역 만큼, image3는 c영역 만큼 차지 한다.
배운 것을 바탕으로 혼자 사용해보자!
body {
width: 100vw;
height: 100vh;
margin: 0;
display: grid;
grid-template-columns: 3fr 1fr;
grid-template-rows: 100px auto 50px;
grid-template-areas:
'header header'
'main aside'
'footer footer';
text-align: center;
}
header, footer {
background: black;
color: white;
}
header {
grid-area: header;
}
footer {
grid-area: footer;
}
main {
grid-area: main;
}
aside {
grid-area: aside;
background: orange;
}
With 드림코딩
CSS Grid 완전 정리 끝판왕 😎
Grid 내용 안에 있는 텍스트 수직 가운데 정렬하기
드림코딩 강의를 다 듣고난 뒤, 그리드를 연습하면서 그리드 박스 안에 있는 텍스트를 수직 가운데 정렬을 하고 싶었다. vertical-align: middle;을 사용하면
바로 될 줄 알았는데 텍스트는 전혀 미동도 하지 않았다. 어떻게 하면 수직 가운데 정렬을 할 수 있을까, 구글링을 하던 중 inline-block 박스
를 만들고
그 박스에다가 vertical-align: middle;
을 적용하면 된다는 정보를 발견했다.
body {
width: 100vw;
height: 100vh;
margin: 0;
display: grid;
grid-template-columns: 3fr 1fr;
grid-template-rows: 100px auto 50px;
grid-template-areas:
'header header'
'main aside'
'footer footer';
text-align: center;
}
header, footer {
background: black;
color: white;
}
header {
grid-area: header;
line-height: 100px;
}
footer {
grid-area: footer;
line-height: 50px;
}
.main {
grid-area: main;
vertical-align: middle;
}
aside {
grid-area: aside;
background: orange;
}
div {
display: inline-block;
height: 100%;
vertical-align: middle;
}
<header>Header</header>
<main>
<div>Main<div>
</main>
<aside>
<div>Aside<div>
</aside>
<footer>Footer</footer>
이렇게 했더니 수직 가운데 정렬 성공! 🤗