🧚🏻‍♂️ HTML , CSS

CSS - grid 속성

ji-hyun 2021. 9. 27. 06:17
<body>
    <div class="container">
        <div class="item">item1</div>
        <div class="item">item2</div>
        <div class="item">item3</div>
        <div class="item">item4</div>
        <div class="item">item5</div>
        <div class="item">item6</div>
        <div class="item">item7</div>
        <div class="item">item8</div>
        <div class="item">item9</div>
    </div>
</body>

 

<style>
        * {
            margin:0;
        }
        body {
            font-size:1.5rem;
        }
        .item {
            display:block;
            background-color:orange;
        }
        .item:nth-child(odd) {
            background-color: darkslateblue;
        }
        .container {
            background-color:lightgray;
        }
    </style>

 

 

위의 코드로 기본 세팅을 해주자.

 

 

 

 

 

 

 

감싸고 있는 부모 container 에게 다음과 같은 속성을 추가하였다.

 

.container {
            display:grid;
            grid-template-columns:4fr 6fr;
            grid-gap:1rem;
            background-color:lightgray;
        }

 

40% 60% 로 나눠진 모습이 보이며, 간격은 1rem 씩이다. %보다 fr 쓸 것을 권장한다.

 

 

 

 

 

 

 

 

 

.container {
            display: grid;
            grid-template-columns: repeat(3, 1fr);
            grid-gap: 1rem;
            background-color: lightgray;
        }

 

repeat 를 사용해서 1fr 이 3번 반복하라는 뜻이다.

즉, 이 코드는 grid-template-columns: 1fr 1fr 1fr 과 결과가 같다.

 

 

 

 

 

 

 

 

 

만약 어떤 부분은 고정을 하고 싶다면 px 단위를 써주면 된다.

 

grid-template-columns: 200px 1fr;

 

보라색 부분은 고정되어 있는데, 주황색 부분은 화면 창에 따라 크기가 바뀐다.

 

 

 

 

 

 

 

 

grid-template-columns:1fr 1fr 1fr;
grid-auto-rows:200px;

 

다음과 같은 코드를 작성하면 아래와 같이 글자가 삐져나오는 경우가 있다.

200px 보다 안의 내용물이 더 크기 때문이다.

 

 

 

 

 

 

 

그래서 다음과 같이 사용해야 한다.

 

grid-template-columns:1fr 1fr 1fr;
grid-auto-rows:minmax(200px, auto);

 

 

 

 

코드 결과 아래 컨텐츠 두 줄은 200px 크기이지만 위의 첫줄은 내용물 크기만큼 커져있다.

 

 

 

 

 

 

 

 

 

display:grid;
grid-template-columns: 1fr 1fr 1fr;
grid-auto-rows:minmax(10em, auto);
grid-gap:1rem;
justify-items:end;

 

이번엔 justify-items 속성을 주었다. 이 속성은 그리드의 item 들을 어느쪽으로 위치할지 결정하는 속성이다.

start, center, end 등의 속성값이 있다.

 

 

end 적용하면 아이템들이 각 공간 안에서 오른쪽으로 정렬되어 있는 모습을 볼 수 있다.

 

 

 

 

 

 

 

 

 

 

display:grid;
grid-template-columns: 1fr 1fr 1fr;
grid-auto-rows:minmax(10em, auto);
grid-gap:1rem;
align-items:start;

 

이번엔 align-items : start 속성을 주었다. 그 결과 위쪽으로 붙는 것을 확인할 수 있다.

개발자 도구로 확인해보면 더 정확하게 알 수 있다.

 

 

 

 

 

 

※ 결론

justify-items수평으로 움직이고, align-items수직으로 움직인다는 것을 기억해두자.

 

 

 

 

 

 

 

 

다음은 한 아이템만 움직이는 속성을 알아볼 것이다.

 

.item:nth-child(5) {
	justify-self: start;
    }

 

5번째 아이템만 가로로 정렬될때 시작지점에 위치하고 싶다면 이렇게 코드를 작성하면 된다.

(align-self 도 이와 같이 적용할 수 있다. (위아래로 움직이는 것과 관련))

 

 

 

 

 

 

 

 

 

 

 

1번 아이템을 만약 윗 공간을 다 쓰게 해주고 싶다면 어떻게 해야할까?

 

먼저 우린 row(행) 과 column(열) 에 대해서 알아봐야 하는데, row 는 가로, column 는 세로로 세어주면 된다.

파란선이 row, 빨간선이 column.. 이렇게 세면 된다.

 

우리가 여태까지 알아본 그리드의 row 와 column 은 위와 같이 각각 4개씩 존재한다.

 

item:nth-child(1){
	grid-column:1/4;
    }

 

이 코드의 의미는 첫번째 아이템에 적용하는 것이며, column 을 1부터 4까지 늘인다는 의미이다.

 

 

 

 

이제 4번째 아이템의 row 를 2~4까지 늘이고 싶다면

 

item:nth-child(4){
	grid-row:2/4;
    }

 

이렇게 작성해주면 되는데 실행결과가....

 

 

이렇게 4번째 아이템이 늘어나긴 했으나 갑자기 제멋대로 공간을 이동해버렸다.

그럴땐 .... 시작점을 지정해주면 된다!

 

item:nth-child(4){
	grid-column:3;
	grid-row:2/4;
    
    }

 

위와 같이 열의 3번째 지점에서 시작하도록 지정해주었다.

 

 

 

 

 

 

※ 이렇게 시작지점을 정해주고 길이를 늘려주는 등을 해서 아이템들을 겹치도록 지정할 수도 있다. (여기서는 생략)

 

 

 

 

 

 

 

flexbox 속성과 비슷한 부분이 많아서 예전에 작성한 내 게시물과 같이 봐야겠다. 이것도 1분 코딩 유튜브를 참고한 것..

2020.05.15 - [html , css] - flexbox에 대하여

 

 

 

 

 

 

본 게시물은 유튜브 1분 코딩님의 강의를 보고 개인적으로 정리 및 공부한 내용입니다.

https://youtu.be/eprXmC_j9A4