'Grid'에 해당되는 글 3건

[CSS3] grid system : cell

CSS3 2019. 10. 29. 00:05
반응형

container로 정의된 grid는 행과 열 단위로 설정은 가능하지만 각 셀을 병합하는 cell단위 설정은 불가능하다.

cell의 병합을 위해서는 grid-column 혹은 grid-row 요소를 사용하여 정의한다.

예를 들어 첫번째 cell과 두 번째 cell을 병합하려면 grid-column1 / 3; 으로 속성을 설정하면 된다.

이때 숫자는 grid gap의 라인 번호를 의미한다. column은 좌측을 1번으로 시작해서 오른쪽으로 cell과 cell사이의 gap을 의미하며, row는 상단을 1번으로 시작해서 아래 쪽으로 cell과 cell사이의 gap을 의미한다.

아래 그림의 빨간색 숫자는 column의 수이며, 초록색 숫자는 row의 수이다.

결국 위에서 예를 들은 grid-column1 / 3; 은 1번과 2번 셀이 합쳐진 것이다.

grid-column1 / 3; grid-column1 / span 2; 로 표기해도 된다. gap line 1에서 2개의 cell을 span한다는 의미이다.

column과 row의 gap 번호

<!--
 * 02-css-grid-cell.html v0.3.0
 * Update: 2019.10.28
 * Author: Developer N
-->
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>02-css-grid-cell-v0.1.0</title>
  <style>
    .grid-container {
      display: grid;
      grid: 100px 100px 100px 100px 100px / auto auto auto auto auto auto auto; 
      grid-gap: 5px;
    }
    .cell-1 {
      grid-column: 1 / 3; /* column gap1에서 gap3까지 cell 2개를 병합 / span 2와 같은 역할 */
    }
    .cell-3 {
      grid-column: 4 / 7; /* column gap4에서 gap8까지 cell 4개를 병합 / span 4와 같은 역할 */
    }
    .cell-4 {
      grid-column: 7 / 8; /* column gap7에서 gap8까지 cell 1개를 지정 */
      grid-row: 1 / 4; /* row gap1에서 gap4까지 cell 3개를 병합 / span 3와 같은 역할 */
    }
    .cell-5 {
      grid-row: 2 / 4; /* row gap2에서 gap4까지 cell 2개를 병합 / span 2와 같은 역할 */
    }
    .cell-6 {
      grid-column: 2 / 4; /* column gap2에서 gap4까지 cell 2개를 병합 / span 2와 같은 역할 */
      grid-row: 2 / 4; /* row gap2에서 gap4까지 cell 2개를 병합 / span 2와 같은 역할 */
    }
    .cell-7 {
      grid-column: 4 / 7; /* column gap4에서 gap7까지 cell 3개를 병합 / span 3와 같은 역할 */
      grid-row: 2 / 4; /* row gap2에서 gap4까지 cell 2개를 병합 / span 2와 같은 역할 */
    }
    .cell-8 {
      grid-column: 1 / 7; /* column gap1에서 gap7까지 cell 6개를 병합 / span 6와 같은 역할 */
    }
    div > div {
      background-color: cornflowerblue;
    }    
  </style>
</head>
<body>
  <div class="grid-container">
    <div class="cell-1">(1) .cell-1</div>
    <div>(2)</div> 
    <div class="cell-3">(3) .cell-2</div>
    <div class="cell-4">(4) .cell-4</div>
    <div class="cell-5">(5) .cell-5</div>
    <div class="cell-6">(6) .cell-6</div>
    <div class="cell-7">(7) .cell-7</div>
    <div class="cell-8">(8) .cell-8</div>
    <div>(9)</div>
    <div>(10)</div>
    <div>(11)</div>
    <div>(12)</div>
    <div>(13)</div>
    <div>(14)</div>
    <div>(15)</div>
    <div>(16)</div>
    <div>(17)</div>
    <div>(18)</div>
    <div>(19)</div>
    <div>(20)</div>
    <div>(21)</div>
  </div>
</body>
</html>

위의 code는 style을 gap의 번호로만 표시한 것이고, span과 함께 표시하면 다음과 같다.

  <style>
    .grid-container {
      display: grid;
      grid: 100px 100px 100px 100px 100px / auto auto auto auto auto auto auto; 
      grid-gap: 5px;
    }
    .cell-1 {
      grid-column: 1 / span 2;
    }
    .cell-3 {
      grid-column: 4 / span 3;
    }
    .cell-4 {
      grid-column: 7 / 8;
      grid-row: 1 / span 3;
    }
    .cell-5 {
      grid-row: 2 / span 2;
    }
    .cell-6 {
      grid-column: 2 / span 2;
      grid-row: 2 / span 2;
    }
    .cell-7 {
      grid-column: 4 / span 3;
      grid-row: 2 / span 2;
    }
    .cell-8 {
      grid-column: 1 / span 6;
    }
    div > div {
      background-color: cornflowerblue;
    }    
  </style>

결과는 다음과 같다.

(17)에서 (21)번 cell의 height가 지정되지 않은 것은 처음 cell을 병합하기 전에 grid-container를 선언하여, 병합과정에서 밀린 cell이다. 이런 경우 grid-container를 수정해 주면 된다.

반응형
블로그 이미지

DeveloperN

개발자 n의 개발 이야기(draft)

,

[CSS3] grid system : template

CSS3 2019. 10. 28. 11:18
반응형

css grid의 container를 설정할 때 grid속성 만으로 설정하는 방법이 있으나 이는 row와 column의 특성은 한 번에 설정하는 방식이었다. (참고 : CSS3 grid system : Basic container )

row와 colum을 구별하여 설정하기 위해서는 다음과 같이 grid-template-columns와 grid-template-row 속성을 사용하면 된다.

<!--
 * css-grid-01-basic.html v0.2.0
 * Update: 2019.10.28
 * Author: Developer N
-->
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>css-grid-01-basic-v0.1.0</title>
  <style>
    .grid-container {
      display: grid;
      grid-template-columns: 10% 20% 150px auto auto;
      grid-template-rows: 100px auto;
      grid-gap: 5px;
    }
    div > div {
      background-color: cornflowerblue;
    }    
  </style>
</head>
<body>
  <div class="grid-container">
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
    <div>5</div>
    <div>6</div>
    <div>7</div>
    <div>8</div>
    <div>9</div>
    <div>0</div>
  </div>
</body>
</html>

지원 브라우서

 

 

 

 

반응형
블로그 이미지

DeveloperN

개발자 n의 개발 이야기(draft)

,
반응형

bootstrap을 통해 grid system에 대한 인지도가 높아진 이후 grid framework이 다수 소개되었고, 개발에 도입하는 빈도도 계속 증가하게 되었다. bootstrap과 같은 종합 framework는 물론이고, grid system만 지원하는 framework까지 그 종류도 다양하게 소개되었다.

이런 인기를 바탕으로 CSS3에서도 css standard로 grid system이 도입되기에 이르렀다.

그 동안 framework의 형태로 사용하던 grid system에 비해 css grid의 장점은 다음과 같다.

  • html에 class의 사용이 간단하다. 특히 반응형으로 제작할 때 class영역에 여러 개의 class명을 나열하지 않고 media query를 통해 선언하면 되기 때문에 가독성을 향상시키기에 충분하다.
  • column의 수를 12개로 제한하지 안아도 된다. 필요한 만큼 column을 만들 수 있다.
  • framework에서 제공되는 필요 없는 css 코드까지 다운로드 할 필요가 없음으로 client의 부하를 줄일 수 있다.

기본 사용법은 다음과 같다.

grid system 전체를 둘러싸게 되는 container를 선언하고 그 내부에 필요한 grid를 생성한다. 마치 <table>로 table영역 전체를 둘러싼 후 그 내부에 row와 col를 선언하는 것과 유사하다.

<!--
 * css-grid-01-basic.html v0.1.0
 * Update: 2019.10.28
 * Author: Developer N
-->
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>css-grid-01-basic-v0.1.0</title>
  <style>
    .grid-container {
      display: grid;
      /* heigth(필요한 줄 수 만큼) / width(필요한 칸 수 만큼) */
      grid: 120px 50px / auto auto auto auto auto; 
      grid-gap: 5px;
    }
    .grid-container > div {
      background-color: cornflowerblue;
    }    
  </style>
</head>
<body>
  <div class="grid-container">
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
    <div>5</div>
    <div>6</div>
    <div>7</div>
    <div>8</div>
    <div>9</div>
    <div>0</div>
  </div>
</body>
</html>

지원 브라우저

 

 

반응형
블로그 이미지

DeveloperN

개발자 n의 개발 이야기(draft)

,