본문 바로가기
CSS

[CSS] Grid 활용법

by 개발지망생 2023. 2. 9.

📝 그리드 사용법

그리드 선언

그리드는 display 속성을 사용해 설정할 수 있다. 설정 값에 따라 블록(Block) 그리드와 인라인(Inline) 그리드로 설정 가능하다.

고정 값(px, rem 등) 단위가 먼저 계산된 후, 남은 공간을 사용하여 계산 처리됩니다.

예시)

.grid-container {
  display: grid; /* grid 또는 inline-grid 설정 가능 */
}

 

grid cell

그리드를 선언한 레이아웃 태그 내부에 포함한 자식요소는 grid cell로 변환된다.

(자식 요소가 아니면 grid cell이 아닙니다)

grid cell에 설정된 float 속성은 적용되지 않는다.

💡 grid cell에 설정된 display 속성은 모두 무시된다.
💡 요소가 아닌 텍스트가 자식으로 포함된 경우, 암시적인 grid cell이 된다. 하지만 암시적으로 생성된 grid cell은 스타일 규칙을 설정할 수 없다. 하지만 상속 가능한 스타일은 적용된다.

 

grid 템플릿

그리드 행(Row), 열(Column)을 설정하여 템플릿을 정할 수 있다.

 

grid-template-columnsgrid-template-rows 속성을 통해, 각 크기를 설정할 수 있다.

설정하는 값은 그리드에서 사용 가능한 공간의 길이를 나타내며, 들어갈 수 있는 단위px, rem, em, %, fr 등이 있다.

예시)

.grid-container {
  grid-template-rows: 25% 100px auto;
  grid-template-columns: 1fr 50px 50px 40px;
}
💡 고정값 VS fr 누가 먼저 계산될까?
fr단위는 고정 값(px, rem 등) 단위가 먼저 계산된 후, 남은 공간을 사용하여 계산 처리된다.

 

 

그리드 행/열 크기 자동 설정

일반적으로 grid-template-columns  grid-template-rows 속성을 통해, 각   크기를 설정한다고 위에서 정리를 했지만 몇 개의 열과 몇 개의 행이 올지 잘 모를 경우 일괄적으로 자동 크기를 지정할 수 있는 방법이 있다.

 

그 방법은 grid-auto-rows grid-auto-columns 속성을 사용하면 가능하다.

예시)

.grid-container {
    grid-auto-columns: 60px;
}

minmax()

위 예시처럼 grid-auto-columns를  60px처럼 고정값을 주면 특정 콘텐츠가 grid-cell 크기보다 큰 경우 잘리는 현상이 생길 수 있다. 이걸 해결할 방법으로 minmax()가 있다.

minmax(최솟값, 최댓값) 함수를 사용하면 최솟값, 최댓값 범위 내에서 값을 지정해 줄 수 있으며, 최댓값에 auto 속성을 넣으면 콘텐츠가 넘치는 만큼 늘어난다.

예시)

.grid-container {
  display: grid;
  /* minmax() 함수 사용법 */
  grid-template-rows: repeat(2, minmax(20px, auto));
  grid-auto-columns: minmax(30px, auto);
}

 

 

그리드 cell 사이 간격을 주고 싶다면?

gap, row-gap, column-gap 속성을 이용하여 cell 사이 간격을 줄 수 있다.

예시)

.grid-container {
  grid-template-rows: 80px auto 80px;
  grid-template-columns: 100px 50px 100px;
  /* 행 사이 간격 설정 */
  row-gap: 10px;
  /* 열 사이 간격 설정 */
  column-gap: 15px;
}
💡 이전에 사용되던 이름은 grid-row-gap, grid-column-gap, gap이었으나,  
현재는 그리드 거터 속성의 이름 앞에 붙어 있던 grid- 는 모두 제외되었다.

 

 

그리드의 꽃!  grid-template-areas, grid-area

grid-area 속성에 설정한 이름과 grid-template-areas 속성에 이름을 같게 넣어주면 두 개의 속성에 공통된 이름을 참조하여, 그리드 템플릿 영역을 설정할 수 있다. grid cell을 같은 이름으로 설정하면 합쳐진다. 마침표(.)는 비어있는 grid cell을 말한다.

예시)

.grid-container {
  grid-template-rows: repeat(3, 300px);
  grid-template-columns: repeat(4, 1fr);

  /**
   * 그리드 템플릿 영역 설정
   * 각 행은 동일한 개수의 열 설정이 요구됩니다.
   */
  grid-template-areas:
    "header header header header"  /* 1행: 4열 모두 header                */
    "main main . sidebar"          /* 2행: 2열 main 1열, 공백 1열, sidebar */
    "footer footer footer footer"; /* 3행: 4열 모두 header                */
}

/* 그리드 영역 이름 설정 */
.grid-header  { grid-area: 'header';  }
.grid-main    { grid-area: 'main';    }
.grid-sidebar { grid-area: 'sidebar'; }
.grid-footer  { grid-area: 'footer';  }

'CSS' 카테고리의 다른 글

[CSS] CSS Attribute 선택자 정리  (0) 2023.02.23
[CSS] 자주 쓰이는 Scss 핵심 기능  (0) 2023.02.14
[CSS] position 정리  (0) 2023.02.13
[CSS] CSS Box Model  (0) 2023.02.13
[CSS] CSS 첫걸음  (0) 2023.02.07

댓글