2024.08.21 (Day 16) - HTML/CSS [grid 그리드 레이아웃 III]

반응형

 

Grid로 만드는 범용 Wrapper Layout Class (Flexbox 버전 포함)
flex, grid 실무적인 적용 방법

■ Grid로 만드는 범용 Wrapper Layout Class (Flexbox 버전 포함)

▼ 우리가 flex에서 했던 것처럼 레이아웃을 좀 더 유연하게 작업하기위해 

    주어진 코드를 추가해주었다.

.l_row {
  display: flex;
  flex-wrap: wrap;
    margin: 0 -20px;
    row-gap: 40px;
}

.l_col {
    box-sizing: border-box;
    padding: 0 20px;
}

.l_col_12_12 { width: 100%; }
.l_col_11_12 { width: 91.66666667%; }
.l_col_10_12 { width: 83.33333333%; }
.l_col_9_12  { width: 75%; }
.l_col_8_12  { width: 66.66666667%; }
.l_col_7_12  { width: 58.33333333%; }
.l_col_6_12  { width: 50%; }
.l_col_5_12  { width: 41.66666667%; }
.l_col_4_12  { width: 33.33333333%; }
.l_col_3_12  { width: 25%; }
.l_col_2_12  { width: 16.66666667%; }
.l_col_1_12  { width: 8.33333333%; }
 
 

 

grid도 똑같이 할 수있다.

     
.l_row {
  display: grid;
  grid-template-columns: repeat( 12, 1fr );
  gap: 10px;
}

.l_row_thin { gap: 4px; }
.l_row_wide { gap: 20px; }

.l_col_12_12 { grid-column: auto / span 12; }
.l_col_11_12 { grid-column: auto / span 11; }
.l_col_10_12 { grid-column: auto / span 10; }
.l_col_9_12  { grid-column: auto / span 9; }
.l_col_8_12  { grid-column: auto / span 8; }
.l_col_7_12  { grid-column: auto / span 7; }
.l_col_6_12  { grid-column: auto / span 6; }
.l_col_5_12  { grid-column: auto / span 5; }
.l_col_4_12  { grid-column: auto / span 4; }
.l_col_3_12  { grid-column: auto / span 3; }
.l_col_2_12  { grid-column: auto / span 2; }
.l_col_1_12  { grid-column: auto / span 1; }
 
 

 

 


 (day16/grid-wrapper/flexbox,grid)

■ flex 실무적인 적용 방법

 

파란색 영역에 이미지를 넣으면 밖에 나오게끔 적용해보자 (유동적이게)

<!DOCTYPE html>
<html>
  <head>
    <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>

    <header class="header">
      <div class="l_wrapper">
        <h1 class="header-logo">HAPPY CODE</h1>
      </div>
    </header>

    <section class="section">
      <div class="l_wrapper">
        <div class="section-container">
          <h2 class="section-title">
            START YOUR<br>
            DIGITAL<br>
            TRANSFORMATION<br>
            JOURNEY
          </h2>
          <div class="section-contents">
          </div>
        </div>
      </div>
    </section>

  </body>
</html>
/* Resets */
body {
  margin: unset;
}

h1, h2 {
  margin: unset;
  font-weight: unset;
  font-size: unset;
}

img {
  max-width: 100%;
  vertical-align: top;
}

/* Typography */
:root {
  font-family: "Montserrat", sans-serif;
}

/* Layouts */
.l_wrapper {
  max-width: 960px;
  margin: 0 auto;
  padding: 0 20px;
}

/* Components */
body {
  background-color: #ddd;
}

.header {
  background-color: #eee;
  margin-bottom: 20px;
  padding: 20px 0;
}

.header-logo {
  font-size: 20px;
  font-weight: bold;
  color: orangered;
}

.section-container {
  background-color: white;
  display: flex;
}

.section-title {
  font-size: 30px;
  padding: 20px 60px 20px 20px;
  font-weight: 600;
  color: rebeccapurple;
}

.section-contents {
  flex-grow: 1;
  box-shadow: inset 0 0 20px dodgerblue;
}

▼ 창크기를 줄이고 늘렸을때 빈공간까지 찬 이미지가 가변 상태여야한다.

    고정된 이미지지가 아닌걸로 요소 밖으로 나오게 할수있는 방법은 네거티브 마진을 사용한다

 

 

 

▼ 하지만 고정픽셀이기에 잠시나마 유연하겠지만 창크기가 달라질수록 변화가있기에

    동적으로 변화를 주려면 100vw - wrapper의 너비 *-1 (음수값처리)

 

 

▼ 만약 wrapper가 고정값이 아닌 작아질 수도 있는 값 max-width:960px 일때는 100%값을 적용 해 주면 된다.

    마진속성의 값으로 %값을 줬을때 기준은 wrapper이다.

 

▼ 전역변수를 적용하여 편의성 높인다.

실무의 전역변수 참된예

See the Pen Untitled by VEAMCAMP (@veamcamp) on CodePen.


■ grid 실무적인 적용 방법

그리드 컨테이너에서 3개의 column을 생성 (1fr , max-width , 1fr)

 

▼ div를 3개 만드는 것 보다 하나의 div가 이동도 되고 병합도 된다

 

가운데는 max-width로 적용 해줘야한다.

 

▼ l_wrapper의 max-width는 언제든 쓰일수도있기에  flex 했던 것 처럼 전역변수 사용해준다. 

min-width를 auto 아닌 값으로, max-width는 전역 변수를 통한 960px 적용

 

▼ colunm start를 적용하여 요소 이동

 

 

▼ 셀 병합하여 요소를 늘려준다

 

 

▼ 실무 효율을 늘리기위해 숫자를 직관적으로 해줘야한다

    [이름] 을 임의로 지정하여 셀을 번호표시가 아닌 셀 이름을 표시한다

 

 

숫자를 쓰지않고 이 이름들을 그대로 inside에 적용 해준다.

 

 

▼ 이토록 다양한 방식으로 전역변수를 사용하여 시스템을 구축하고 실용성을 더한다

 

 

 

반응형