카테고리 없음

CSS Grid 완벽 가이드

닉네임이 멋이 중헌디 2021. 6. 5. 10:34

https://heropy.blog/2019/08/17/css-grid/

 

CSS Grid 완벽 가이드

CSS Grid(그리드)는 2차원(행과 열)의 레이아웃 시스템을 제공합니다.Flexible Box도 훌륭하지만 비교적 단순한 1차원 레이아웃을 위하며, 좀 더 복잡한 레이아 ...

heropy.blog

SS Grid(그리드)는 2차원(행과 열)의 레이아웃 시스템을 제공합니다.
Flexible Box도 훌륭하지만 비교적 단순한 1차원 레이아웃을 위하며, 좀 더 복잡한 레이아웃을 위해 우리는 CSS Grid를 사용할 수 있습니다.

CSS Grid는 예전부터 핵(Hack)으로 불린 다양한 레이아웃 대체 방식들을 해결하기 위해 만들어진 특별한 CSS 모듈입니다.

CSS Grid

CSS Grid의 효율적인 학습을 위해서 파이어폭스 브라우저를 사용해 테스트할 것을 추천합니다.
개발자 도구를 열고 요소를 검색해 표시된 grid 버튼을 선택합니다

 

.container{ 

 display: grid;

 gird-template-rows: 100px 100px;  (세로 2개)  // 이때 px가 아니라 전체를 비율로 나누고 싶으면  fr를 쓰면 된다. 

                                                            // 1fr 1fr 또는 repeat (2, 100px) 

 grid-template-column: 100px 100px 100px;  (가로 3개) //repeat (3, 1fr) 

}  

 

.item:nth-child(1){ 

 grid-column: 1/4;  // 개발자도구로 보면 grid가 뜬다 - 이 grid를 클릭하면 행, 열이 뜬다

- 1번 item을 4번까지 확장을 한다 

 

.item:nth-child(3){ 

 grid-column: span 2; // 2개의 셀을 차지하는 아이템이 된다

 

이렇게 몇가지를 바꾸면 나머지 아이템들이 암시적으로 외부에 배치가 된다

 

Grid Properties

CSS Grid는 CSS Flex와 같이 Container(컨테이너)와 Item(아이템)이라는 두 가지 개념으로 구분되어 있습니다.
Container는 Items를 감싸는 부모 요소이며, 그 안에서 각 Item을 배치할 수 있습니다.

Grid Container Properties

Grid Container를 위한 속성들은 다음과 같습니다.

속성의미

display 그리드 컨테이너(Container)를 정의
grid-template-rows 명시적 행(Track)의 크기를 정의 : 세로
grid-template-columns 명시적 열(Track)의 크기를 정의 : 가로
grid-template-areas 영역(Area) 이름을 참조해 템플릿 생성
grid-template grid-template-xxx의 단축 속성
row-gap(grid-row-gap) 행과 행 사이의 간격(Line)을 정의 : 세로 gap 
column-gap(grid-column-gap) 열과 열 사이의 간격(Line)을 정의 : 가로 gap
gap(grid-gap) xxx-gap의 단축 속성
grid-auto-rows 암시적인 행(Track)의 크기를 정의
grid-auto-columns 암시적인 열(Track)의 크기를 정의
grid-auto-flow 자동 배치 알고리즘 방식을 정의
grid grid-template-xxx과 grid-auto-xxx의 단축 속성
align-content 그리드 콘텐츠(Grid Contents)를 수직(열 축) 정렬 : 세로
justify-content 그리드 콘텐츠를 수평(행 축) 정렬 : 가로 
place-content align-content와 justify-content의 단축 속성
align-items 그리드 아이템(Items)들을 수직(열 축) 정렬
justify-items 그리드 아이템들을 수평(행 축) 정렬
place-items align-items와 justify-items의 단축 속성

 

align-content는 수직(열 축) 정렬 

content(item들의 집합)을 어느쪽에 붙일건지 

- space-around : 좌우의 여백이 같다 

- space-evenly : 모든 여백을 동일하게 가져가는 (양끝에도 같은 크기의 여백이 있다) 

- stretch: 최대한 수직축을 늘려서 container에 맞게 한다 

- space-between: 위, 아래를 붙이고 이에 맞춰 나머지 공간을 균등하게 나눈다

그리드 콘텐츠의 세로 너비가 그리드 컨테이너보다 작아야 한다 

기본값 : normal (stretch)와 같다 

start  - 전체 내용을 수직의 시작(위)에 붙일것인지

center - 수직의 가운데 

end - 수직의 끝

 

justify -content

그리드 콘텐츠의 수평(행 축) 정렬합니다 

가로 너비가 그리드 컨테이너보다 작아야 한다 

start  - 전체 내용을 수평의 시작(왼)에 붙일것인지

center - 수평의 가운데 

end - 수평의 끝(오른쪽) 

// 그리드 안에 있는 모든 애들을 대상으로 

 

align-items

그리드 아이템들을 수직(열 축) 정렬합니다 

세로 너비가 자신이 속한 그리드 행의 크기보다 작아야 한다 

start  - 전체 내용을 수직의 시작(위)에 붙일것인지

center - 수직의 가운데 

end - 수직의 끝

stretch

 

자신이 속해있는 셀의 기준으로 

start, end, center, stretch 

 

justify-items

그리드 아이템들을 수평(행 축) 정렬

각 셀 안에서 start, end, end 

 

 

 

 

Grid Item Properties

Grid Item을 위한 속성들은 다음과 같습니다.

속성                             의미

grid-row-start 그리드 아이템(Item)의 행 시작 위치 지정
grid-row-end 그리드 아이템의 행 끝 위치 지정
grid-row grid-row-xxx의 단축 속성(행 시작/끝 위치)
grid-column-start 그리드 아이템의 열 시작 위치 지정
grid-column-end 그리드 아이템의 열 끝 위치 지정
grid-column grid-column-xxx의 단축 속성(열 시작/끝 위치)
grid-area 영역(Area) 이름을 설정하거나, grid-row와 grid-column의 단축 속성
align-self 단일 그리드 아이템을 수직(열 축) 정렬
justify-self 단일 그리드 아이템을 수평(행 축) 정렬
place-self align-self와 justify-self의 단축 속성
order 그리드 아이템의 배치 순서를 지정
z-index 그리드 아이템의 쌓이는 순서를 지정

align-self 

단일 그리드 아이템을 수직(열 축) 정렬합니다  // items와 동일한데 여러개가 아니라 하나만 있을 때 

그리드 아이템의 세로 너비가 자신이 속한 그리드 행의 크기보다 작아야 합니다 

 

justify-self

도 마찬가지 

 

grid-template-areas

지정된 그리드 영역 이름(grid-area)을 참조해 그리드 템플릿을 생성합니다.

grid-area는 Grid Container가 아닌 Grid Item에 적용하는 속성입니다.

.container {

display: grid;

grid-template-rows: repeat(3, 100px);

grid-template-columns: repeat(3, 1fr);

grid-template-areas:

"header header header"

"main main aside"

"footer footer footer";

}

 

header { grid-area: header; }

main { grid-area: main; }

aside { grid-area: aside; }

footer { grid-area: footer; }

(마침표)를 사용하거나 명시적으로 none을 입력해 빈 영역을 정의할 수 있습니다.

.container { display: grid;

grid-template-rows: repeat(4, 100px);

grid-template-columns: repeat(3, 1fr);

grid-template-areas:

"header header header"

"main . ." "main . aside"

"footer footer footer"; }

 

header { grid-area: header; }

main { grid-area: main; }

aside { grid-area: aside; }

footer { grid-area: footer; }

 

grid-row 

-start 

-end

의 단축속성 

grid-row-start/grid-row-end:  : 1번으로 시작해서 4번으로 끝나는 영역을 채워라 ex. 1/4 

=> 따로 쓸 수도 있지만 /로 단축속성 가능 

=> 숫자는 칸이 아니라 선을 기준으로 

시작과 끝을 숫자로 해줄 수도 있고 

=> span을 쓰는 방법 : start, end 각자 쓸 수 있음. 하지만 하나는 기준으로 span은 하나만

ex. grid-row: span 3/4  ( 4번째줄부터 시작해서 3,2,1(span3)로 내려가 첫번째 줄까지 확장) 

 

span이 뒤에 있으면 앞+뒤 가 end

span이 앞에 있으면 뒤-앞 가 start

 

 

grid-area : row-start / column-start / row -end / column-end

숫자가 음수로 나오면 뒤에서부터 세는 것: 1 2 3 4 [-4 -3 -2 -1]

grid-area: 영역 이름 

 

grid

grid-template : 대부분 앞에 row, 뒤에 columnauto

grid-auto