2022.04.12
CSS Grid
- 1차원 레이아웃 flex속성(수직, 수평중 택1)와 다르게 grid는 2차원 레이아웃(수직, 수평 둘다 가능)
grid는 두 방향으로 레이아웃 할 수 있음 - grid는 flex와 같이 container(부모요소)와 item(자식요소)으로 구분이 됨
용어정리
- Grid Track(그리드 트랙): grid의 행(row) 또는 열(column)
- Grid Line(그리드 라인): 행과 열 사이사이에 있는 너비. gutter라고도 함
- Grid Cell(그리드 셀): grid 하나의 칸. 아이템들이 들어갈 수 있는 하나의 공간
- Grid Area(그리드 여역): 셀로 이루어진 영역(셀들의 집합)
- Grid Gap(그리드 갭): grid 셀 사이의 간격
Grid Container
- grid는 컨테이너에 display: grid; 를 주면서 시작됨
.container { display: grid; }
- 그리드 트랙의 크기들을 지정해 주는 속성.
단위는 px, fr(=fraction으로 숫자 비율대로 트랙의 크기를 나눠줌)
repeat함수: repeat(개수, 비율)반복되는 값을 자동으로 처리할 수 있음
minmax함수: 최솟값과 최댓값 지정
auto-fill, auto-fit: column개수를 정하지 않고 설정된 너비가 허용하는 한 최대한 셀을 채우는것. auto-fit은 그리드 컨테이너 내부에 공간이 남을 경우, 그 공간을 각 셀들이 나눠 갖는다grid-template-rows: 그리드 행 배치 grid-template-columns: 그리드 열 배치 //고정크기와 가변크기를 섞어 쓸 수 있음 grid-template-columns: 200px 2fr 1fr; //repeat(반복횟수, 반복값) grid-template-columns: repeat(5, 1fr); //minmax grid-template-row: repeat(3, minmax(100px, auto); 최소100px는 확보하며, 100px넘거나면 auto처리
gap
그리드 셀 사이의 간격을 설정
//row 간격 5px row-gap: 5px; //column 간격 5px column-gap: 5px; //row-gap:10px, column-gap:5px; gap: 10px 5px;
grid-auto-colums, grid-auto-rows:트랙의 크기를 지정하지 않고 자동으로 늘려줌
gird-column, grid-row
gird-column
<!DOCTYPE html>
<html>
<head>
<style>
.grid-container {
display: grid;
grid-template-columns: repeat(4, auto);
grid-gap: 5px;
background-color: pink;
padding: 10px;
}
.grid-container > div {
background-color: tomato;
text-align: center;
padding: 20px 0;
font-size: 30px;
}
.item1 {
grid-column: 1 / 3;
}
</style>
</head>
<body>
<div class="grid-container">
<div class="item1">1</div>
<div class="item2">2</div>
<div class="item3">3</div>
<div class="item4">4</div>
<div class="item5">5</div>
<div class="item6">6</div>
<div class="item7">7</div>
</div>
</body>
</html>
grid-row
<!DOCTYPE html>
<html>
<head>
<style>
.grid-container {
display: grid;
grid-template-columns: repeat(4, auto);
grid-gap: 5px;
background-color: pink;
padding: 10px;
}
.grid-container > div {
background-color: tomato;
text-align: center;
padding: 20px 0;
font-size: 30px;
}
.item1 {
grid-column: 3 / 5;
grid-row: 2 / 3;
}
</style>
</head>
<body>
<div class="grid-container">
<div class="item1">1</div>
<div class="item2">2</div>
<div class="item3">3</div>
<div class="item4">4</div>
<div class="item5">5</div>
<div class="item6">6</div>
<div class="item7">7</div>
</div>
</body>
</html>
몇 개의 셀을 차지하게 할것인지를 지정해줄수도 있음
// 1번라인에서 2칸
grid-column: 1 /span 2;
// 1번 라인에서 4칸
grid-row: 1 / span 4;
- grid-template-areas: 각 영역(grid area)에 이름을 붙이고, 그 이름을 이용해서 배치하는 방법으로 매우 직관적
<!DOCTYPE html>
<html lang="en">
<head>
<style>
.container {
width: 500px;
display: grid;
grid-template-columns: 2fr 1fr;
grid-template-rows: 100px 200px 100px;
border: 4px solid;
grid-template-areas:
"header header"
"main nav"
"footer footer";
}
.item {
border: 1px solid;
}
.item:nth-child(1) {
grid-area: header;
}
.item:nth-child(2) {
grid-area: main;
}
.item:nth-child(3) {
grid-area: nav;
}
.item:nth-child(4) {
grid-area: footer;
}
</style>
</head>
<body>
<div class="container">
<div class="item">1 header</div>
<div class="item">2 main</div>
<div class="item">3 nav</div>
<div class="item">4 footer</div>
</div>
</body>
</html>
grid-auto-flow: 아이템이 자동 배치되는 흐름을 결정하는 속성
// dense는 남은 셀의 공간을 채우게함. grid-auto-flow:(row생략가능) dense; // column dense로 줄 경우 수직으로 남은 셀 공간을 채우게 됨 grid-auto-flow: column dense;
세로 방향 정렬
align-items: 아이템을 세로방향으로 정렬.container { align-items: stretch; align-items: start; align-items: center; align-items: end; }
가로 방향 정렬
justify-items: 아이템을 가로방향으로 정렬.container { justify-items: stretch; justify-items: start; justify-items: center; justify-items: end; }
place-items
align-items와 justify-itms를 같이 쓸 수 있는 단축 속성.container { place-items: center center; }
align-content
grid 아이템들의 높이를 모두 합한 값이 grid 컨테이너의 높이보다 작을 때 아이템들을 통째로 정렬.container { align-content: stretch; align-content: start; align-content: center; align-content: end; align-content: space-between; align-content: space-evenly; }
justify-content
gird 아이템들의 너비를 모두 합한 값이 grid 컨테이너의 너비보다 작을 때 아이템들을 통째로 정렬
```
.container {justify-content: stretch; justify-content: start; justify-content: center; justify-content: end; justify-content: space-between; justify-content: space-evenly;
}
place-content
align-content와 justify-content를 같이 쓸 수 있는 단축 속성.container { place-content: center center; }
Grid Item
gird container의 자식요소들로 grid의 규칙에 의해 배치됨
- align-self: 해당 아이템을 세로(column)방향으로 정렬
.item { align-self: stretch; align-self: start; align-self: center; align-self: end; }
- justify-self: 해당 아이템을 가로(row)방향으로 정렬
.item { justify-self: stretch; justify-self: start; justify-self: center; justify-self: end; }
- place-self: align-self와 justify-self를 같이 쓸 수 있는 단축 속성
.item { place-self: center center; }
- order: 각각의 아이템을 시각적으로 나열 순서를 결정. 숫자가 작을수록 먼저 배치
- z-index: 숫자가 클수록 위로 올라옴
'프론트엔드 > CSS' 카테고리의 다른 글
CSS ...끄적 (0) | 2022.04.15 |
---|---|
CSS filter속성 (0) | 2022.04.13 |
가상클래스(pesudo class)와 가상요소(pesudo element) (0) | 2022.04.08 |
CSS초기화 reset.css 및 CSS 말줄임 표시방법 (0) | 2022.04.07 |
CSS 속성 (0) | 2022.04.06 |