web/html css

[css] grid Layout

xudegloss 2023. 3. 20. 00:21

1. grid Layout

반응형 웹 페이지를 쉽게 구현 가능하다. 2가지 레이아웃은 상황에 따라 혼용하여 사용하므로, 적절한 곳에 이용하기.

flex Layout 1차원 구조에 유리하다. 2차원 구조를 만들기 위해서 여러번 중첩시켜야 한다.
비교적 작은 단위 레이아웃에 적합하다. 변경 가능성이 있는 경우에 유리하다.
grid Layout 2차원 구조에 유리하다.
큰 규모 그리고 확실한 경우에 유리하다. 효율적으로 반응형 디자인 구현이 가능하다. 하지만 모든 브라우저에서 지원되지 않는다. << can I use? 에서 확인 가능하다. 
위치 자유도가 높은 편이다.

 

그리드는 그리드 라인과 그리드 아이템으로 나눌 수 있는데, 그리드 라인은 그리드 숫자와 밀접한 관련성이 있다. 나중에 그리드 아이템을 병합하는 경우에 grid-row 또는 grid-column을 이용하는데, 그 때 유용하게 사용 가능하다.

2. 행 또는 열의 개수 및 크기 지정하기

  • grid-template-rows : 그리드 행과 개수 및 크기 지정하기.
  • grid-template-columns : 그리드 열과 개수 및 크기 지정하기.

이 경우 많이 사용하는 단위와 함수가 있다.

  • fr : 분수를 의미한다. 1fr 2fr 2fr 1fr은 1:2:2:1의 비율을 나타낸다.
  • repeat(반복 횟수, 비율) : 반복하는 함수를 의미한다. repeat(4, 1fr)은 1fr:1fr:1fr:1fr을 나타낸다.
  • grid-gap : 그리드 아이템 사이에 공간 만들어준다.

3. 행 또는 열을 사용자 지정 통합하기

  • grid-row : 시작점 / 종료점을 의미한다. 행 방향으로 통합하는 것을 의미한다.
  • grid-column : 시작점 / 종료점을 의미한다. 열 방향으로 통합하는 것을 의미한다.

이 때 그리드 숫자를 이용하여 통합한다. 숫자 대신 span을 이용하여 몇 칸을 차지하는지 표현할 수 있다.

위의 방법을 이용하여 원하는 레이아웃을 만들 수 있다.

4. html 코드

<!DOCTYPE html>
<html lang="ko">
  <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>Grid</title>
    <link rel="stylesheet" href="./grid__class.css" />
  </head>
  <body>
    <div class="grid__container">
      <div class="item item1">item 1</div>
      <div class="item item2">item 2</div>
      <div class="item item3">item 3</div>
      <div class="item item4">item 4</div>
      <div class="item item5">item 5</div>
    </div>
    <div class="container">
      <div class="item header">header</div>
      <div class="item__container">
        <div class="item menu">menu</div>
        <div class="item items">items</div>
      </div>
    </div>
  </body>
</html>

5. css 코드

* {
  box-sizing: border-box;
  padding: 0;
  margin: 0;
}

.grid__container {
  border: 1px solid black;
  height: 500px;
  display: grid;
  grid-template-columns: 2fr repeat(2, 1fr);
  /* 2fr 1fr 1fr */
  grid-template-rows: 2fr 3fr;
}

.item {
  border: 1px solid black;
}

.item1 {
  background-color: aquamarine;
  grid-column: 1/3;
}

.item4 {
  background-color: cadetblue;
  grid-column: 2/3;
}

.item2 {
  background-color: chartreuse;
}

.item3 {
  background-color: deeppink;
}

.container {
  margin-top: 50px;
  display: grid;
}

.header {
  background-color: coral;
  height: 100px;
}

.item__container {
  display: grid;
  height: 300px;
  grid-template-columns: repeat(4, 1fr);
}

.menu {
  background-color: yellow;
}

.items {
  background-color: violet;
  grid-column: 2/5;
}

'web > html css' 카테고리의 다른 글

[패스트캠퍼스] 국비지원 3일차 학습일지  (0) 2023.05.07
[css] 반응형 Layout  (0) 2023.03.20
[css] html 요소에 애니메이션 주기  (0) 2023.03.19
[css] position  (0) 2023.03.19
[css] 배경과 색상  (0) 2023.03.10