그리드는 파이어폭스로 테스트하는 것이 좋다.
왜냐하면 눈에 보기 쉽게 나뉘어져 보이기 때문.
그리드도 flex와 마찬가지로 content와 item으로 나뉘어져있다.
display:grid로 하면 block요소처럼 세로로 쌓여진다.
display:inline-grid로 하면 인라인요소처럼 되서 가로로 쌓인다.
<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
</div>
<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
</div>
.container {
border: 2px solid red;
display:grid;
}
.container .item {
border: 2px solid;
}
grid-template-rows : 행의 높이와 개수
grid-template-columns : 열의 너비와 개수
grid-template-columns:100px 100px 50px; // 3개의 열 각 너비
grid-template-rows:100px 50px 50px; // 3개의 행 각 높이
비율로 맞추고 싶다면 fr단위를 쓰면된다. 비율로 생각하면 쉽다.
grid-template-columns:1fr 1fr 1fr;
그런데 1fr을 매번 3번 쓰기는 힘들기도 하고 실수할여지도 있다. 그래서
grid-template-columns:repeat(3, 1fr);
이런식으로 사용하는 것이 좋다.
* repeat을 사용할 때 일정 크기를 계속 반복하게 사용하고 싶다면 repeat(3, 100px 50px 50px) 이런 식으로 사용 가능하다.
추가로 선에 이름을 명시해서 선이름을 사용할 수 있다.
꼭 대괄호를 써줘야한다.
grid-template-rows : [first] 100px [second] 200px [third];
예시
<div class="container">
<div class="item">header</div>
<div class="item">main</div>
<div class="item">main2</div>
</div>
.container {
border: 2px solid red;
display:grid;
width: 300px;
grid-template-columns:100px [first] 100px [second] 100px [third];
grid-template-rows:repeat(3, 100px);
grid-auto-columns:100px;
/* grid-auto-flow:dense; */
}
.container .item {
border: 8px solid;
}
.item:nth-child(1) {
grid-column: second / third;
}
정렬
justify-content 주축
align-content
그리드 아이템에 적용하는 속성
grid-column
grid-row
아래는 첫번째 아이템애 대해서 몇번까지 영역을 차지하게 할 것인지 설정하는 예시다.
개발자 환경에서 grid 아이콘을 클릭하면 영역이 보이는데 그것을 참고하면 된다.
주의할 점은 1~4를 할 때 1/4 이런식으로 슬래시가 들어간다는 것.
+ 1 / span 3 이런식으로도 쓸 수 있는데 span 숫자 이런것은 몇칸을 차지한다는 얘기다.
.item:nth-child(1) {
grid-column: 1/4;
grid-row: 1/3;
}
area를 이용한 영역잡기
<div class="container">
<div class="item">header</div>
<div class="item">main</div>
<div class="item">aside</div>
<div class="item">footer</div>
</div>
.container {
border: 2px solid red;
display:grid;
grid-template-columns:repeat(3, 100px);
grid-template-rows:repeat(3, 100px);
grid-template-areas:
"header header header"
"main main aside"
"footer footer footer";
}
.container .item {
border: 8px solid;
}
.item:nth-child(1) {
grid-area:header;
}
.item:nth-child(2) {
grid-area:main;
}
.item:nth-child(3) {
grid-area:aside;
}
.item:nth-child(4) {
grid-area:footer;
}
중간에 비우고싶으면 .을 넣으면 된다.
간격넣기
row-gap : 행과 행사이 간격을 넣는다. 원래는 간격이 아니고 선의 굵기.
column-gap : 열과 열사이 간격.
ex) row-gap:15px;
gap:30px 15px // 이것과 같다.
앞에 grid- 접두사 붙이는 것
이건 폐기되었다. 근데 일부 버전의 브라우저 지원을 하려면 사용해야 될 수도있어서 알고만 있자.
암시적 행과 열의 크기 정의
명시적은 내가 컨트롤 할 수 있는 범위에서 크기를 지정하는 것이라면 암시적은 존재하지 않는 영역의 크기를 지정해줌으로서 밖으로 나가져버린 요소를 보이게 해주는 것.
grid-auto-rows:100px;
grid-auto-columns:100px;
* 알아두기만하자.
grid-auto-flow 속성을 이용해서 빈 공간을 자동으로 채워주는 기능을 수행할 수도 있다.
grid-area보다 더 좋은방법
.container {
display:grid;
width: 600px;
grid-template:
"header header header" 80px
"main . aside" 350px
"footer footer footer" 130px
/2fr 1fr 1fr;
}
.item:nth-child(1) {
grid-area:header;
}
.item:nth-child(2) {
grid-area:main;
}
.item:nth-child(3) {
grid-area:aside;
}
.item:nth-child(4) {
grid-area:footer;
}
.item {
border:1px solid red;
}
각 아이템의 정렬
justify-item 주축
align-item
이외에도 그리드 관련되서 속성들이 더있다.
mdn 문서나 grid로 정리잘되있는 블로그를 추가 참고하자.
'Stack & Tool > HTML, CSS' 카테고리의 다른 글
flex 잠깐 정리 (0) | 2021.07.16 |
---|---|
height에 사용되는 단위 중 2가지를 알아보자. %, vh (0) | 2021.07.16 |
float, flex비교 (0) | 2021.05.20 |
transition, transform, animation (0) | 2021.05.20 |
background-attachment : fixed를 이용한 세련된 홈페이지 + background-size (0) | 2021.05.20 |
댓글