코딩하는 김딸기

그리드를 활용 안전한 안전성 유지/그리드 아이템의 수동 배치 + 셀 병합 본문

카테고리 없음

그리드를 활용 안전한 안전성 유지/그리드 아이템의 수동 배치 + 셀 병합

김딸기* 2024. 8. 22. 16:49

html 마크업 설정

<!DOCTYPE html>
<html>
  <head>
    <title>Coffee</title>
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link rel="stylesheet" href="style.css">
  </head>
  <body>
    <div class="container">
      <div class="sidebar">sidebar</div>
      <div class="contents">contents</div>
    </div>
  </body>
</html>

 

 

minmax를 사용하여 안전성 높임

/*COMPONENT*/
.container{
  box-shadow: inset 0 0 20px RED;
  height: 100vh;/*뷰포트의 100%높이*/;
  display: grid;
  justify-content: center;
  align-content: center;
  padding: 0 40px;

   /*1번 칼럼은 244px로 고정, 2범 칼럼은 min-width를 0으로 초기화하고
  max-width를 830px로 만들어 상황에 따라 작아질수 있게 함(고정값 아님)*/
  grid-template-columns: 244px minmax(0,830px);/*고정값이 아니므로 창 작아지면 크기 줄어듦*/
  grid-template-rows: minmax(600px, auto);/*최소600px, 컨텐츠 내용이 늘어나면 높이 커짐*/
 
}

 

 

-컨테이너보다 내부 컨텐츠가 커질 경우 이에 대한 안전성을 높임

/*COMPONENT*/
.container{
  box-shadow: inset 0 0 20px RED;
  min-height: 100vh;/*최소 뷰포트의 100%높이
  그냥 height는 고정높이라 내부 컨텐츠가 heoght보다 많아졌을 때 넘침
  =>내부 컨텐츠가 컨데이너 크기보다 많아지만 전체 높이 증가*/

  box-sizing: border-box;/*  min-height: 100vh에 상하단 패딩이 포함되면 스크롤 바가 생기므로 100vh에 상하단 패딩이 포함될 수 있게 조정*/
  display: grid;

  /*현재 그리드 컨테이너에서 가로세로 중앙 정렬*/
  justify-content: center;
  align-content: center;

  padding: 0 40px;/*창 크기 작아졌을 때 패딩 설정*/

   /*1번 칼럼은 244px로 고정, 2범 칼럼은 min-width를 0으로 초기화하고
  max-width를 830px로 만들어 상황에 따라 작아질수 있게 함(고정값 아님)*/
  grid-template-columns: 244px minmax(0,830px);/*고정값이 아니므로 창 작아지면 크기 줄어듦*/
  grid-template-rows: minmax(600px, auto);/*최소600px, 컨텐츠 내용이 늘어나면 높이 커짐*/
 
}

 


 

 

 

 
    <div class="wrapper">
      <div class="grid">
        <div class="item big ">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
        <div class="item">4</div>
        <div class="item long">5</div>
        <div class="item ">6</div>
        <div class="item">7</div>
        <div class="item">8</div>
        <div class="item">9</div>
        <div class="item">10</div>
        <div class="item">11</div>
        <div class="item">12</div>
        <div class="item">1</div>
      </div>
    </div>
.wrapper{
    max-width: 960px;
    margin: 100px auto;
}

.grid{
    box-shadow: inset 0 0 20px red;
    aspect-ratio: 1/1;

    display: grid;
    grid-template-columns: repeat(4, 1fr);
    grid-template-rows: repeat(4, 1fr);

    gap: 20px;

    grid-auto-flow: row;/*-> 방향으로 아이템 배열*/

}


.item{
    background-color: orange;
    padding: 20px;
    font-size: 60px;
}

 



.item.big{
    background-color: orangered;
    grid-column-start: 1;
    grid-column-end: 3;
    grid-row-start: 1;
    grid-row-end: 3;
    /*이때 auto는 브라우저가 판단하는 값이며 최대한 마크업 순서를 유지하려 노력한다*/

    /*grid-column: 1/3; /*단축속성 1~3열*/
    /*grid-row: 1/3; /*단축속성 1~3행*/

    /*grid-column: 1/ span 2; /*단축속성 1~3열(1에서부터 2칸 차지)*/

}

 

 

 


.item.long{
    background-color: blue;
    grid-column-start: 4;
    grid-column-end: 5;

    grid-row-start: 2;
    grid-row-end: 5;

    /*2번 방법*/
    /*grid-row-start: auto; */
    /*grid-row: auto/ span 3; */

}

 


.item.wide{
    background-color: green;
    grid-column: 1/3;
     /*2번 방법*/
    /*grid-column: auto/ span 2; */
    /*grid-row: auto; */
}

-마크업의 순서는 유지하고 span개념으로만 작성