본문 바로가기
카테고리 없음

[새싹x코딩온] 웹 개발자 부트캠프 과정 3주차 회고 | Grid System

by 새파란레몬 2023. 8. 7.

오늘은 수업 시간에 다룬 부트스트랩(Bootstrap)의 grid system에 대해 소개해 보려 합니다. 

 

먼저 부트스트랩에 대해서 소개하자면, html, css, js 등을 이용해 간단하게 웹페이지를 구성할 수 있는 여러 요소들을 미리 디자인해놓은 사이트입니다.

bootstrap 예시

위의 왼쪽 이미지와 같이 코드를 붙여 넣어 여러 종류의 버튼을 구현할 수도 있고, card list를 생성할 수도 있습니다.

 

물론 html 내의 head 태그 내에 Bootstrap의 이 소스를 활용할 수 있도록 연결해주는 CDN 코드를 붙여 넣어야 합니다.

해당 CDN link는 아래에서 확인할 수 있습니다.

https://getbootstrap.com/docs/5.3/getting-started/introduction/

 

Get started with Bootstrap

Bootstrap is a powerful, feature-packed frontend toolkit. Build anything—from prototype to production—in minutes.

getbootstrap.com

 

또한 grid란 본래 '격자'를 뜻하는 단어인데, 디자인과 코딩을 비롯하여 여러 분야에서 자주 사용되는 용어입니다. 

Grid, 격자 구조


본격적으로 부트스트랩의 Grid System에 대해서 이야기 해보겠습니다.

 

부트스트랩의 grid는 가로로 긴 기둥(column)이 배치가 됩니다. 그리고 12칸을 기준으로 그리드를 나누게 됩니다.

 

<div class="container">
      <div class="row">
        <div class="col py-3 bg-success"></div>
        <div class="col py-3 bg-warning"></div>
        <div class="col py-3 bg-info"></div>
        <div class="col py-3 bg-success"></div>
      </div>
      <br />
     
      <div class="row">
        <div class="col-1 py-3 bg-success"></div>
        <div class="col-3 py-3 bg-warning"></div>
        <div class="col-4 py-3 bg-info"></div>
        <div class="col-4 py-3 bg-info"></div>
      </div>
      <br />

      <div class="row">
        <div class="col-7 py-3 bg-success"></div>
        <div class="col-3 py-3 bg-warning"></div>
        <div class="col-4 py-3 bg-info"></div>
        <div class="col-4 py-3 bg-info"></div>
        <!-- 부트스트랩의 grid 기준은 12 칸이기 때문에 col-x 에서 x 의 합이 12를 넘기면 줄바꿈이 된다 -->
      </div>
      <br />

      <main class="row g-4">
 
        <section class="col-9 py-3 bg-success">
          Lorem ipsum dolor ㅣLorem ipsum dolor sit amet consectetur adipisicing
          elit. Tenetur doloribus dolores corporis? Lorem ipsum dolor sit amet
          consectetur adipisicing elit. Voluptatum saepe, explicabo ad cumque
          aliquid quasi molestiae dolorem, commodi quaerat officiis vero
          voluptas nemo, quae nostrum vitae nulla voluptatibus dolores laborum?
        </section>
        <aside class="col-3 py-3 bg-warning"></aside>
      </main>
    </div>

위의 코드를 구현해보면 아래와 같습니다. 

class container의 첫 div는 위의 첫 column에 구현되어 있습니다. 12칸을 기준으로 col에 아무런 설정도 해주지 않았기에 3칸씩 할당하여 각각의 너비를 차지한 모습입니다.

 

두번째 div 처럼 col에 각각 col-1, col-3, col-4, col-4를 주게 되면 1 : 3 : 4 : 4 의 비율로 한 줄의 각각의 너비를 차지한 것과 같은 효과를 줄 수 있음을 알 수 있습니다. 

 

세 번째 div는 7 + 3 + 4 + 4 = 18로 12칸이 넘어가게 되는데, 그러면 다음과 같이 줄이 넘어가는 효과가 나타나게 됩니다.

 

이와 같은 너비 영역의 차지는 네 번째의 section과 aside처럼 활용할 수 있습니다. 웹사이트에서 section과 aside를 이용하면 정돈된 느낌을 줄 수 있기 때문입니다. lorem + 숫자 + tab을 하면 원하는 글자 수 만큼의 임의의 문자열을 줄 수 있습니다. 위와 같이 임의의 lorem으로 글자 수를 많이 차지하게 되더라도 영역의 너비 비율이 변하지 않음을 알 수 있습니다. 


<div class="row">
      <div class="col py-3 bg-success"></div>
      <div class="col-7 py-3 bg-warning"></div>
      <div class="col py-3 bg-info"></div>
      <!-- 하나의 grid를 7로 설정하고 나머지를 설정하지 않는다면 2.5:7:2.5의 너비를 갖는다 -->
    </div>

또한 위와 같이 하나의 grid를 7로 설정하고 나머지는 그냥 col로 놓는다면 가운데는 12 중 7의 너비를 가지고 나머지 5를 1 : 1의 비율로 나누어 2.5 : 7 : 2.5의 비율을 갖게 됩니다.

 


<div class="row p-2">
      <div class="col-8 bg-warning">
        col-8
        <div class="row">
          <div class="col-6 py-3 bg-success">col-6</div>
          <div class="col-6 py-3 bg-info">col-6</div>
          <!-- 부모 자식 관계 아래에 있다면 위와 같이 8에 해당하는 넓이를 비율에 맞게 나눠가짐 -->
        </div>
      </div>
      <div class="col-4 bg-success">col-4</div>
    </div>

부모 자식간의 관계는 다음과 같이 나타나게 됩니다. col - 8과  col - 4 의 너비를 먼저 지정한 후, col - 8안에 각각 col-6을 두개를 넣는다면 col - 8 이 차지한 너비를 1 : 1의 비율로 나누게 됩니다. 


 

< Breakpoint >

 

 

breakpoint는 다음 표과 같은 일정한 px기준으로 column의 배치가 변하는 중단점입니다. 

출처 : 부트스트랩

 

<div class="row">
      <div class="col-sm-9 bg-danger">col-sm-9</div>
      <!-- sm 사이즈(576px) 이상일 때 9:3 비율-->
      <!-- sm 사이즈(576px) 이하일 때 1:1 비율 & 줄바꿈-->
      <div class="col-sm-3 bg-primary">col-sm-3</div>
    </div>

각각 576px이상, 576px 이하 

col 옆에 위와 같이 sm을 써주게 되면 576px 이상에서는 9:3 즉, 2:1의 비율을 갖지만 그 이하에서는 위 아래로 정렬하게 됩니다.


 

<div class="row">
      <div class="col-sm bg-success">col-sm</div>
      <div class="col-sm bg-warning">col-sm</div>
      <div class="col-sm bg-success">col-sm</div>
      <!-- col-sm 만 설정한다면 576px 이하일 때 줄바꿈되며 세로 정렬 -->
    </div>

    <div class="row">
      <div class="col-6 col-sm-9 bg-danger">col-sm-9</div>
      <div class="col-6 col-sm-3 bg-primary">col-sm-3</div>
      <!-- col-6과 같이 설정한다면 줄바꿈 되지 않고 그 이하일 때 6:6, 즉 1:1 크기 유지 -->
    </div>

col에 특별한 숫자를 지정해주지 않는다면 수직으로 쌓아지게 됩니다. 

 

하지만 아래의 div 같이 col-6 씩 너비를 주면 576px 이하에서 1:1의 비율로 유지할 수도 있습니다. 

 


 

<div class="row">
      <div class="col col-sm-9 col-md-6 col-lg-4 bg-info">col-sm-9</div>
      <div class="col col-sm-3 col-md-6 col-lg-8 bg-primary">col-sm-3</div>
    </div>

위의 코드와 같이 sm, md, lg와 같이 각각의 breakpoint 에 따라 column의 너비를 설정해 줄 수도 있습니다. 

576px 이하 / 576px 이상 768 px 이하
768px 이상 992px 이하 / 992px 이상