코딩을 처음 배웠을 때 CSS와 SCSS로 Grid System을 적용하는 방법에 대해 배우고 그 코드를 사용했었다.
다음은 SCSS로 Grid System을 만든 예시이다.
// Grid System
$columns: 12;
$column-md-width: 44px;
$column-xl-width: 75px;
$gutter: 10px;
.container {
width: 100%;
max-width: ($column-md-width + $gutter * 2) * $columns;
padding: 0 $gutter;
margin: 0 auto;
}
.row {
display: flex;
flex-wrap: wrap;
margin: 0 -#{$gutter};
}
[class *= "col-md-"] {
padding: 0 $gutter;
}
@for $i from 1 through 12 {
.col-md-#{$i} {
width: ($column-md-width + $gutter * 2) * $i;
}
}
@media screen and (min-width: 1200px) {
.container {
max-width: ($column-xl-width + $gutter * 2) * $columns;
}
[class *= "col-xl-"] {
padding: 0 $gutter;
}
@for $i from 1 through 12 {
.col-xl-#{$i} {
width: ($column-xl-width + $gutter * 2) * $i;
}
}
}
하지만 부트스트랩에서 Grid System에 대해 반응형까지 편하게 제공해주면서 부트스트랩을 학습한 후 거의 부트스트랩만 사용한 것 같다.
하지만 CSS에서도 grid를 제공하기 때문에 이를 학습하고 앞으로 사용해보려고 한다.
("1분코딩"님의 포스트를 주로 참고하였습니다. Grid에 대해 공부하고 싶은 분은 아래 링크로!)
이번에야말로 CSS Grid를 익혀보자
["Can I use?" 검색 결과]

공통점
차이점
CSS로 그리드시스템을 적용하기 위해 꼭 필요한 요소
.container {
display: grid;
}
.container {
display: grid;
grid-template-columns: 200px 200px 500px;
grid-template-rows: 200px 200px 500px;
}
repeat 함수반복되는 값을 자동으로 처리할 수 있는 함수
예를 들어,
.container {
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr 1fr;
grid-template-rows: 1fr 1fr 1fr 1fr 1fr;
}
위 CSS는
.container {
display: grid;
grid-template-columns: repeat(5, 1fr);
grid-template-rows: repeat(5, 1fr);
}
과 동일하다.
minmax 함수.container {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(3, minmax(100px, auto));
}
auto-fill개수를 미리 정하지 않고 설정된 너비가 허용하는 한 최대한의 셀
.container {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(20%, auto));
}
auto-fit개수를 미리 정하지 않고 설정된 너비가 허용하는 한 최대한의 셀
auto-fill과 다른점
auto-fit은 빈 공간이 있을 경우 너비를 조정해 남는 공간을 채움.container {
row-gap: 10px;
column-gap: 20px;
}
.container {
gap: 10px 20px;
/* row-gap: 10px; column-gap: 20px; */
}
두 예시는 동일한 간격을 만든다.
가로 세로 간격이 동일할 경우 다음과 같이 작성할 수도 있다.
.container {
gap: 20px;
/* row-gap: 20px; column-gap: 20px; */
}
만약 grid-template-rows에서 row는 3줄로 정의하였는데, 3줄을 넘어 더 row가 존재할 가능성이 있는 경우 grid-auto-rows를 사용하면 된다.
.container {
grid-template-rows: repeat(3, minmax(100px, auto));
grid-auto-rows: minmax(100px, auto);
}
.header { grid-area: header; }
.sidebar-a { grid-area: a; }
.main-content { grid-area: main; }
.sidebar-b { grid-area: b; }
.footer { grid-area: footer; }
/* 이름 값에 따옴표가 없는 것에 주의하세요 */
row(순서대로 배치, flex에서 flex-direction:row; flex-wrap:wrap;처럼 작동)

column

dense, row dense
column dense
align-items justify-items를 같이 쓸 수 있는 단축 속성align-content justify-content를 같이 쓸 수 있는 단축 속성align-self justify-self를 같이 쓸 수 있는 단축 속성.item:nth-child(1) {
grid-column-start: 1;
grid-column-end: 3;
grid-row-start: 1;
grid-row-end: 2;
}
.item:nth-child(1) {
grid-column: 1 / 3;
grid-row: 1 / 2;
}
이렇게 작성하여도 동일하게 작동한다.
시작번호/끝번호를 지정하는 방법 외에 몇 칸을 차지할지 지정할 수 있다.
.item:nth-child(1) {
/* 1번 라인에서 2칸 */
grid-column: 1 / span 2;
/* 1번 라인에서 3칸 */
grid-row: 1 / span 3;
}
auto를 적으면 알아서 칸만 차지하고 배열이된다.
.item:nth-child(2) {
grid-column: auto / span 2;
grid-row: auto / span 3;
}