본문 바로가기

Computer/HTML, CSS, Javascript

[CSS] 과제: 그리드 레이아웃

 

Task 1

첫 문제는 간단한 그리드 모양 만드는 문제였다.

 

grid1-download.html

<!DOCTYPE html>

<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />

    <title>Grid: task 1</title>

    <link rel="stylesheet" href="../styles.css" />

    <style>
      body {
        background-color: #fff;
        color: #333;
        font: 1.2em / 1.5 Helvetica Neue, Helvetica, Arial, sans-serif;
        padding: 1em;
        margin: 0;
      }

      .grid > * {
        background-color: #4d7298;
        border: 2px solid #77a6b6;
        border-radius: 0.5em;
        color: #fff;
        padding: 0.5em;
      }

      .grid {
        display: grid;
        grid-template-columns: 1fr 1fr 1fr;
        gap: 20px;
      }
    </style>
  </head>

  <body>
    <div class="grid">
      <div>One</div>
      <div>Two</div>
      <div>Three</div>
      <div>Four</div>
      <!-- 여기서부터 임의로 추가한 박스입니다. -->
      <div>Five</div>
      <div>Six</div>
      <div>Seven</div>
    </div>
  </body>
</html>

결과

 

 

 

 

Task 2

그리드 격자 문제였다. row와 column만 잘알아도 해결할 수 있는 문제였다. 아래의 그림에서 볼 수 있듯이 이번 문제 불때는 약어를 사용해서 풀었다. grid-row-start, grid-row-end, grid-column-start, grid-column-end가 아닌 grid-area 요소를 활용하면서 한 줄에 넣었다. 

그리드 문제풀이
그리드 문제풀이

 

grid2-download.html

<!DOCTYPE html>

<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />

    <title>Grid: task 2</title>

    <link rel="stylesheet" href="../styles.css" />

    <style>
      body {
        background-color: #fff;
        color: #333;
        font: 1.2em / 1.5 Helvetica Neue, Helvetica, Arial, sans-serif;
        padding: 1em;
        margin: 0;
      }

      .grid > * {
        border-radius: 0.5em;
        color: #fff;
        padding: 0.5em;
      }

      .grid {
        display: grid;
        grid-template-columns: 1fr 1fr 1fr 1fr;
        grid-template-rows: 100px 100px 100px;
        gap: 10px;
      }

      .item1 {
        grid-area: 1 / 1 / 3 / 4;
        background-color: rgb(74 102 112 / 70%);
        border: 5px solid rgb(74 102 112 / 100%);
      }

      .item2 {
        grid-area: 2 / 2 / 4 / 5;
        background-color: rgb(214 162 173 / 70%);
        border: 5px solid rgb(214 162 173 / 100%);
      }
    </style>
  </head>

  <body>
    <div class="grid">
      <div class="item1">One</div>
      <div class="item2">Two</div>
    </div>
  </body>
</html>

 

결과

 

 

 

 

Task 3

그저 grid-template-areas와 grid-area를 활용하는 문제였다. 보이는 그대로 2차원 배열 활용하면 되고 그리고 보이는 그대로 grid-area를 지정하면 되는 문제였다.

 

grid3-download.html

<!DOCTYPE html>

<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />

    <title>Grid: task 3</title>

    <link rel="stylesheet" href="../styles.css" />

    <style>
      body {
        background-color: #fff;
        color: #333;
        font: 1.2em / 1.5 Helvetica Neue, Helvetica, Arial, sans-serif;
        padding: 1em;
        margin: 0;
      }

      .grid > * {
        background-color: #4d7298;
        border: 2px solid #77a6b6;
        border-radius: 0.5em;
        color: #fff;
        padding: 0.5em;
      }

      .grid {
        display: grid;
        grid-template-areas:
          "one one one one"
          "two three three three"
          ". four four four";
        gap: 10px;
      }

      .one {
        grid-area: one;
      }

      .two {
        grid-area: two;
      }

      .three {
        grid-area: three;
      }

      .four {
        grid-area: four;
      }
    </style>
  </head>

  <body>
    <div class="grid">
      <div class="one">One</div>
      <div class="two">Two</div>
      <div class="three">Three</div>
      <div class="four">Four</div>
    </div>
  </body>
</html>

 

결과

task3 결과물

 

 

 

Task 4

이 문제는 풍선 사진들이 없어서 따로 적어 놓을게요! html 문서는 안 바꿔서 css만 올립니다.

이번 문제는 그리드와 flex-box 두 개의 레이아웃을 활용하는 문제였다. 처음 그리드는 gap만 잘 지키고 기본 틀만 잘 만들어 주면 되었고 flex 박스는 안에 정렬과 사진보다 버튼이 나오지 않도록 하는 flex-wrap 요소를 활용하였다. 이는 아래와 같다.

css

.container {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  grid-template-rows: 50% 50%;
  gap: 10px;

}

.tags {
  display: flex;
  flex-flow: row wrap;
  align-items: center;
  justify-content: center;
}

 

결과

task4 결과 이미지

 

 

 

 

 

목차 템플릿을 만들어 봤는데 tistory 내의 코드가 강렬하네요! 다음엔 좀 더 나아진 목차를 만들어 볼게요.

오류 있으면 댓글 달아주세요. 감사합니다!

728x90