이번 장에서는 CSS grid에 대해서 간단하게 알아보고, CSS Grid(MDN)를 이용해서 위의 웹 페이지 구조를 만들어 보겠습니다.
Grid를 적용하기 위해서 위의 그림에서 가상의 영역을 나눠 보겠습니다.
영역은 아래와 같이 나눌 수 있습니다.
Grid의 영역을 3X5로 만드는게 좋아보입니다.
grid-template-areas:
". . ."
". . ."
". . ."
". . ."
". . .";
grid-template-areas:
"header header header"
"menu main top"
"menu main middle"
"menu main bottom"
"footer footer footer";
.header {
grid-area: header;
}
grid-template-columns: 300px 1fr 200px;
grid-template-rows: 150px 1fr 1fr 1fr 100px;
grid-template-rows: 150px repeat(3, 1fr) 100px;
gap: 10px;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
height: 100vh;
}
.parent {
height: 100%;
display: grid;
grid-template-areas:
"header header header"
"menu main top"
"menu main middle"
"menu main bottom"
"footer footer footer"
;
grid-template-rows: 150px repeat(3, 1fr) 100px;
grid-template-columns: 300px 1fr 200px;
gap: 10px;
}
.box {
display: flex;
justify-content: center;
align-items: center;
text-align: center;
background-color: pink;
}
.header {
grid-area: header;
}
.menu {
grid-area: menu;
}
.main {
grid-area: main;
}
.top {
grid-area: top;
}
.middle {
grid-area: middle;
}
.bottom {
grid-area: bottom;
}
.footer {
grid-area: footer;
}
</style>
</head>
<body>
<div class="parent">
<div class="box header">Header - 높이 150px</div>
<div class="box menu">Mennu - 300px</div>
<div class="box main">Main</div>
<div class="box top">Top - 너비 200px</div>
<div class="box middle">Middle - 너비 200px</div>
<div class="box bottom">Bottom - 너비 200px</div>
<div class="box footer">Footer - 높이 100px</div>
</div>
</body>
</html>
지금까지 CSS grid를 이용해서 간단한 웹 페이지 구조를 만들어 봤습니다.
display:flex를 이용하면 1차원적으로 영역을 정렬할 수 있습니다.
grid를 사용하면 2차원적으로 영역을 더 간편하게 정렬할 수 있습니다.
현재는 grid보다는 display:flex를 많이 쓰는 경향이 있지만, 점점 grid를 사용하는 웹 페이지가 늘어나고 있습니다.
grid를 사용하는 방법에 익숙해진다면, 웹 페이지를 더욱 동적으로 만들 수 있게 됩니다.