: Whereas Flexbox is mostly useful for positioning items in a one-dimensional layout, CSS grid is most useful for two-dimensional layouts, providing many tools for aligning and moving elements across both rows and columns.
- grid container and grid items. grid container is parent element and gris items is child elemenets.
display
property to grid
(block-level) or inline-grid
숫자
, %
사용. %
를 쓸때는 width가 꼭 있어야함. <!-- 숫자로 정의 -->
.grid {
display: grid;
width: 500px;
grid-template-columns: 100px 200px;
}
<!-- %로 정의 -->
.grid {
display: grid;
width: 1000px;
grid-template-columns: 20% 50%;
}
<!-- 섞기 -->
.grid {
display: grid;
width: 100px;
grid-template-columns: 20px 40% 60px;
}
숫자
와 %
사용. %를 쓸때는 height이 꼭 있어야함. <!-- 섞기 -->
.grid {
display: grid;
width: 1000px;
height: 500px;
grid-template-columns: 100px 200px;
grid-template-rows: 10% 20% 600px;
}
grid-template-columns
, grid-template-rows
/
column.grid {
display: grid;
width: 1000px;
height: 500px;
grid-template: 200px 300px / 20% 10% 70%;
}
grid-row-gap
,grid-column-gap
.grid {
display: grid;
width: 320px;
grid-template-columns: repeat(3, 1fr);
grid-column-gap: 10px;
}
fr
은 grid items가 grid를 넘치는 것을 방지해줌. 숫자
나 %
와 동시에 사용가능, 밑의 column 코드를 보면 두번째 열이 60px를 먼저 차지, 남은 공간 만큼을 첫번째 열 1fr, 세 번째 열 1fr 만큼 차지함. .grid {
display: grid;
width: 1000px;
height: 400px;
grid-template: 2fr 1fr 1fr / 1fr 60px 1fr;
}
repeat()
은 행과 열을 반복 생성해줌. .grid {
display: grid;
width: 300px;
grid-template-columns: repeat(3, 100px);
<!-- (= grid-template-columns: 100px 100px 100px) -->
}
.grid {
display: grid;
grid-template-columns: 100px minmax(100px, 500px) 100px;
}
.item {
grid-row-start: 1;
grid-row-end: 9;
}
/
endspan
은 행(열)이 얼마나 차지하는지 적용가능. 코드를 예시로 보면 start는 4이고 span
는 2이므로 열은 총 4,5rows를 말함. span
을 사용하면, 끝을 넘어가는 오류를 방지할수 있음.<!-- 다 같지만 다르게 표현한 코드 -->
.item {
grid-row: 4 / 6;
}
.item {
grid-column: 4 / span 2;
}
.item {
grid-column-start: span 2;
grid-column-end: 6;
}
grid-row-start
,grid-column-start
,grid-row-end
,grid-column-end
를 한번에 사용할 수 있음. .item {
grid-area: 2 / 3 / 4 / span 5;
}
grid-area
로 영역의 이름을 붙이고, grid-tempate-areas
를 이용해 레이아웃의 구조를 만들 수 있음.<!-- html 5개의 구조-->
<div class="container">
<header>Welcome!</header>
<nav>Links!</nav>
<section class="info">Info!</section>
<section class="services">Services!</section>
<footer>Contact us!</footer>
</div>
container {
display: grid;
max-width: 900px;
position: relative;
margin: auto;
<!-- 원하는 레이아웃 만들기(2columns 4rows) -->
grid-template-areas: "head head"
"nav nav"
"info services"
"footer footer";
<!-- 행과 열 크기 지정하기 -->
grid-template-rows: 300px 120px 800px 120px;
grid-template-columns: 1fr 3fr;
}
<!-- 각 영역의 이름짓기 -->
header {
grid-area: head;
}
nav {
grid-area: nav;
}
.info {
grid-area: info;
}
.services {
grid-area: services;
}
footer {
grid-area: footer;
}
img {
grid-area: 2 / 3 / 5 / 5;
z-index: 5;
}
- grid에는 2개의 축(axis)이 존재.
- column(block) axis : top to bottom
- row(inline) axis : left to right
start
: 왼에서 오end
: 오에서 왼center
: 가운데stretch
: grid area를 채움.start
end
center
stretch
space-around
: grid items around(둘레)에 균일한 간격을 만듬. space-between
: grid items between(사이)에 ㅔ균일한 간격을 만듬space-evenly
: items와 양 끝에 균일한 간격을 만듬. start
,end
,center
,stretch
start
,end
,center
,stretch
,space-around
,space-between
,space-evenly
start
,end
,center
,stretch
row
: (디폴트) grid row를 기준으로 순서대로 배치가 되다가 들어갈 자리가 없으면 그 칸은 비우고 아래로 배치가 됨.column
: 세로를 기준으로 배치되다가 -dense
: 빈 공간없이 빡빡하게 -row dense
,colum demse
같이 결합도 가능함