호팍이
article thumbnail
Published 2022. 9. 18. 15:41
grid CSS


grid

flex는 1차원으로 조정하는 것이라면, grid는 2차원으로 조정하는 레이아웃 시스템.

보통 전체적인 틀을 grid로, 세부적인 틀을 flex로 잡는 게 좋아 보인다.

(header, footer, section 등은 grid로, grid로 잡은 틀 속에 디테일은 flex로)

  • grid container - display: grid; 를 적용하는 grid의 전체 영역.
  • grid item - grid container의 자식 요소.
  • grid track - grid의 행 또는 열.
  • grid cell - grid의 한 칸을 가리키는 말.  grid item 하나가 들어가 있는 가상의 공간.
  • grid line - grid 셀을 구분하는 선.
  • grid number - grid line의 각 번호.
  • grid gap - grid 셀 사이의 간격
  • grid area - grid 라인으로 둘러싸인 사각형 영역. 그리드 셀의 집합. 셀 여러 개 합치기 가능.

컨테이너에 적용하는 속성

display: grid;

아이템들이 block 요소라면 변화는 없다.

inline-grid는 inline-block과 비슷하다.

 

grid-template-rows/columns

행/열의 배치를 결정.

grid-template-rows: 100px 200px 300px;
grid-template-columns: 200px 200px 200px;
//px로 할 시

grid-template-rows: 1fr 2fr 3fr;
grid-template-columns: 2fr 2fr 2fr;
//반응형으로 할 시

3x3으로 영역이 나뉘게 된다.

 

repeat 함수

repeat(반복횟수, 반복 값) 

grid-template-rows: repeat(3, 1fr)
//위와 아래는 같다.
grid-template-rows: 1fr 1fr 1fr

 

minmax 함수

minmax(최소크기, 최대크기)

최대크기를 auto로 한다면 크기에 맞게 자동으로 늘어난다. (메인 축이 row일 때, rows -> 높이 columns -> 너비)

 

auto-fill, fit

column의 개수를 미리 정하지 않고 설정된 너비가 허용하는 한 최대한 셀을 채운다.

grid-template-columns: repeat(auto-fill, minmax(25%, auto));

열의 최소 너비가 25%이므로 행 하나에 4개의 아이템이 들어간다. 아이템 개수가 모자르면 공간이 남게 된다.

여기서 auto-fit을 쓰게되면 남는 공간을 채운다.

gap

그리드 셀 사이의 간격을 설정

row-gap, column-gap을 따로 설정할 수 있지만, gap을 이용해 두 가지를 한꺼번에 적용가능 하다.

gap :20px;
/* row-gap: 20px; column-gap: 20px; */

gap : 10px 20px;
/* row-gap: 10px; column-gap: 20px */

 

grid-auto-columns/rows

grid-template-columns/rows의 통제를 벗어난 위치에 있는 트랙의 크기를 지정하는 속성.

column이나 row 개수를 미리 알 수 없을 때 사용. 알아서 채워준다.

 

align-items

아이템들을 메인 축의 수직 방향(세로 방향)으로 정렬한다. 컨테이너에 적용

  • stretch - 기본 값. 셀을 가득 채운다.
  • start - 맨 위부터 아이템의 크기만큼.
  • center - 가운데에 아이템의 크기만큼.
  • end - 맨 아래부터 아이템의 크기만큼.

justify-items

아이템들을 가로 방향으로 정렬한다. 컨테이너에 적용.

align-items왜 동일함.

 

place-items

align-items와 justify-items를 같이 쓸 수 있는 단축 속성.

place-items: start center;
/* align-items: start; justify-items: center; */

 

 

 


아이템에 적용하는 속성

grid-(column/row)-(start/end/)

grid 아이템에 적용하는 속성으로, 각 셀의 영역을 지정한다.

grid-column 1/3으로 적용하면, 1칸이 아니라 2칸을 차지한다.

grid line의 번호는 1번부터 시작.

grid-column-start: 2;
grid-column-end: 4;
gird-row-start: 1;
grid-row-end: 2;

grid-column: 2 / 4;
grid-row: 1 / 2;

grid-column: 2 / span 2;
grid-row: 1 / span 1

 

grid-template-areas

영역 이름으로 그리드 정의. 각 영역에 이름을 붙이고, 이를 이용해서 배치하는 방법.

gird-template-areas:
	"header	header	header"
    	"a	main	b     "
        ".	.	.     "
    	"footer footer footer ";
.header {grid-area: header;}
.sidebar-a {grid-area: a;}
.main {grid-area: main;}
.sidebar-b {grid-area: b;}
.footer {grid-area: footer;}

// 이름을 따옴표로 감싸지 않는다.
header
sidebar-a main sidebar-b
footer

 

grid-auto-flow

자동 배치. 아이템이 자동 배치되는 흐름을 결정하는 속성.

dense - 빈 셀을 채워준다. row와 column에 따라 기준이 달라진다.

 

align-content / justify-content / place-content

아이템 그룹 세로/가로 정렬. gird 아이템들의 높이/너비를 모두 합한 값이 grid 컨테이너의 높이보다 작을 때 통째로 정렬.

space-beteween/around/evenly 적용가능.

place-content: align-content; justify-content;

 

align-self / justify-self / place-self

개별 아이템을 세로/가로 축 방향으로 정렬.

place-self: align-self; justify-self;

order

배치순서. 작은 숫자일 수록 먼저 배치. 시각적 순서일 뿐이다.

 

z-index

z축 정렬. 숫자가 클 수록 위로 올라온다.

 

참고

https://studiomeal.com/archives/533

 

이번에야말로 CSS Grid를 익혀보자

이 포스트에는 실제 코드가 적용된 부분들이 있으므로, 해당 기능을 잘 지원하는 최신 웹 브라우저로 보시는게 좋습니다. (대충 인터넷 익스플로러로만 안보면 된다는 이야기) 이 튜토리얼은 “

studiomeal.com

 

'CSS' 카테고리의 다른 글

GlobalStyle과 Theme 사용하기 (typescript를 곁들인)  (0) 2022.11.05
display, position, flex  (0) 2022.09.18
profile

호팍이

@호팍이네