개발(Web)/Web

[CSS] Grid Template

shinyelee 2022. 1. 18. 10:42

Making Layouts - CSS Grid

Grid Template

fr(fraction)

이 모양에서 다시 시작.

004.html

<!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" />
    <link rel="stylesheet" href="004.css" />
    <title>Grid</title>
  </head>
  <body>
    <div class="grid">
      <div class="header"></div>
      <div class="content"></div>
      <div class="nav"></div>
      <div class="footer"></div>
    </div>
  </body>
</html>

004.css

.grid {
  display: grid;
  gap: 5px;
  height: 50vh;
  grid-template-columns: repeat(4, 100px);
  grid-template-rows: repeat(4, 100px);
}

.header {
  background-color: springgreen;
}

.content {
  background-color: deepskyblue;
}

.nav {
  background-color: mediumpurple;
}

.footer {
  background-color: orange;
}

grid-template-columns의 100px을 1fr으로 바꾸면 각 칸(cell)의 너비가 늘어나 화면을 채운다.
모바일 환경을 고려하면 px보다 fr이나 %를 쓰는 게 좋다. 모바일에서는 픽셀 단위가 아주 크게 느껴지기 때문.
grid-template-columns: 1fr 4fr 1fr 2fr;으로 설정하면 각 box가 1:4:1:2 비율로 늘어난다(flex와 비슷함).
grid-template-columns: repeat(4, 3fr); 어차피 3:3:3:3이나 1:1:1:1이나 똑같으니 3fr을 1fr로 바꾸는 게 낫다.
column의 너비 말고 row의 높이에도 fr 단위를 써 보면 그냥 빈 화면이 나타난다.
row에 auto를 적용해도 마찬가지다. row에 auto와 fr이 안 먹히는 이유는 각 칸이 block 요소이기 때문이다.
(block 요소의 경우) width의 기본값은 최대(=화면 너비), height의 기본값은 최소(0)이 된다.
grid의 height를 지정해주면 화면에 정상적으로 표현된다.


화면 너비에 따라 가로로 늘어나는 형태의 grid를 만들어 보자.
grid-area name을 정하고
이렇게 이름, 높이, 너비를 지정해 주면 된다.
제대로 작동한다.
단, grid-template에서 repeat을 쓰면 아래처럼 grid가 깨지기 때문에
번거로워도 column의 너비를 직접 지정해야 한다.

004.css

.grid {
  display: grid;
  gap: 10px;
  height: 50vh;
  grid-template:
    "header header header header" 1fr
    "content content content nav" 2fr
    "footer footer footer footer" 1fr / 1fr 1fr 1fr 1fr;
}

.header {
  background-color: springgreen;
  grid-area: header;
}

.content {
  background-color: deepskyblue;
  grid-area: content;
}

.nav {
  background-color: mediumpurple;
  grid-area: nav;
}

.footer {
  background-color: orange;
  grid-area: footer;
}

참고

 

grid-template - CSS: Cascading Style Sheets | MDN

The grid-template CSS property is a shorthand property for defining grid columns, rows, and areas.

developer.mozilla.org

반응형

'개발(Web) > Web' 카테고리의 다른 글

[CSS] Grid Container 정렬하기  (0) 2022.01.20
[CSS] Grid Items 정렬하기  (0) 2022.01.19
[CSS] Grid Item  (0) 2022.01.17
[CSS] Grid Container  (0) 2022.01.16
[CSS] Grid Layout Module  (0) 2022.01.15