프론트엔드 공부/CSS 기초

18일차 프론트엔드 공부 - grid

프망생222 2024. 9. 23. 21:48

- 18일차 프론트엔드 공부 -

 


grid 레이아웃

 

flex 

1차원적 구조

row 혹은 column 구조 택1

 

grid 

2차원적 구조

row와 column 레이아웃 동시 설정 가능

 

grid 속성

 

1. 요소의 속성을 grid로 변경

display: grid

 

grid-container : grid가 적용된 요소

grid-item : grid가 적용된 요소의 자식 요소들

grid-line : grid-item 사이의 경계를 의미

grid-number : 해당 grid-line이 몇번째 line인지를 의미

 

 

grid-number

 

 

grid-line

 

2. grid-template-rows

grid의 행의 개수 및 크기를 지정할 수 있다

grid-template-rows: 1fr 2fr 200px

 

2. grid-template-columns

grid의 열의 개수 및 크기를 지정할 수 있다

grid-template-columns: 1fr 2fr 200px

 

fr

fraction(분수)의 약자, grid-template에서 사용할 수 있는 비율 단위

 

ex)

grid-template-columns: 1fr 2fr 2fr 1fr 

 

 

repeat(a, b)

grid-template에서 사용할 수 있는 반복 함수

b 규격의 grid-template을 a개 생성한다.

grid-template-columns: repeat(4, 1fr)

 

grid-template-columns: repeat(4, 1fr) = grid-template-columns: 1fr 1fr 1fr 1fr

 

grid-template-rows: repeat(2, 1fr 200px) = grid-template-columns: 1fr 200px 1fr 200px

 

grid-template-rows: 2fr repeat(2, 1fr 200px) = grid-template-columns: 2fr 1fr 200px 1fr 200px

 

ex)

grid-template-columns: 200px repeat(3, 1fr)

grid-template-rows: 1fr 2fr

 

 

grid 실습

<!DOCTYPE html>
<html lang="ko">
<head>
    <title>Document</title>
    <link rel="stylesheet" href="./index.css">
</head>
<body>
    <div class="container">
        <div class="item item1">
            item1
        </div>
        <div class="item item2">
            item2
        </div>
        <div class="item item3">
            item3
        </div>
        <div class="item item4">
            item4
        </div>
        <div class="item item5">
            item5
        </div>
        <div class="item item6">
            item6
        </div>
    </div>
</body>
</html>

 

 

* {
    box-sizing: border-box;
}

.container {
    border: 2px solid red;
    display: grid;
    grid-template-columns: 1fr 2fr;
    grid-template-rows: repeat(4, 100px);
    grid-gap: 5px;
}

.item {
    border: 2px solid blue;
}

 

grid 실습

 

grid-gap 각각의 grid 아이템 사이에 빈칸을 줌 

주의사항 : 인터넷 익스플로어는 지원하지 않는다.

 

grid-column / grid-row

grid-item이 얼마만큼의 영역을 차지할 지 정의한다.

grid-column: 1/3

grid-column은 grid-line의 번호, grid-row는 grid-number의 번호를 기준으로 영역을 할당한다.

 

ex)

grid-column: 1 / 3;

grid-row: 2 / 3;

 

grid 실습2

<!DOCTYPE html>
<html lang="ko">
<head>
    <title>Document</title>
    <link rel="stylesheet" href="./index.css">
</head>
<body>
    <div class="container">
        <div class="item item1">
            item1
        </div>
        <div class="item item2">
            item2
        </div>
        <div class="item item3">
            item3
        </div>
        <div class="item item4">
            item4
        </div>
        <div class="item item5">
            item5
        </div>
        <div class="item item6">
            item6
        </div>
    </div>
</body>
</html>

 

* {
    box-sizing: border-box;
}

.container {
    border: 2px solid red;
    display: grid;
    grid-template-columns: repeat(2, 1fr 2fr);
    grid-template-rows: repeat(4, 100px);
    grid-gap: 5px;
}

.item {
    border: 2px solid blue;
}

.item1 {
    grid-column: 1 / 3;
    grid-row: 2 / 3;
    background: green;
}

 

grid 실습2

 

Flex와 Grid의 차이점

 

Flex

- 비교적 작은 단위의 레이아웃 구성에 적합

- 작업 유동성이 높기 때문에, 디자인이나 기획이 확실하게 잡히지 않아 변경 가능성이 있는 경우에 적합

 

Grid

- 큰 규모의 레이아웃 구성에 적합

- 레이아웃 구조가 확실하게 잡혀있는 경우, 효율적으로 반응형 디자인을 구현할 수 있음

 

단, 그리드는 상대적으로 최신 기술이기에 모든 브라우저를 지원하지 않는다.

https://caniuse.com/ 위 사이트를 통해 그리드가 사용 가능한 브라우저를 확인할 수 있다.

참고사항: 빈칸에 display: grid를 입력하면 그리드를 사용가능한 브라우저

display: flex을 입력하면 flex를 사용가능한 브라우저를 확인 가능하다.