본문 바로가기
: ) Web/웹 스터디

[HTML, CSS] CSS Grid 레이아웃 만들기

by miiinn 2023. 12. 15.

 

⭐ display: grid;

  • grid를 쓰면 색칠하듯이 자유롭게 박스 배치 가능
  • 직관적

 

[방법1] 내부박스 크기 조절을 통해 레이아웃 만들기

 

 

[HTML]

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <link href="css_grid.css" rel="stylesheet">
    </head>
    <body>

        <div class="grid-container">
            <div class="grid-nav"></div>
            <div class="grid-sidebar"></div>
            <div class="grid-content"></div>
            <!-- <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div> -->
        </div>

    </body>
</html>

 

 

[CSS]

.grid-container {
    display: grid;
    /* 세로칸 개수, 사이즈 */
    grid-template-columns: 100px 100px 100px 100px;
    /* 가로칸 개수, 사이즈 */
    grid-template-rows: 100px 100px 100px;
}

.grid-container div {
    border: 1px solid black;
}

.grid-nav {
    /* 세로선 1-5까지 차지해주세요 */
    grid-column: 1 / 5;
}

.grid-sidebar {
    grid-row: 2 / 4;
}

.grid-content {
    grid-column: 2 / 5;
    grid-row: 2 / 4;
}

▶ 균등하게 나눌 때 fr단위로 폭 지정 가능 (fraction)-배수

  • 1fr 1fr 1fr은 1배 (1:1:1)
  • 2fr 1fr 1fr은 (2:1:1)
  • height있어야됨.

▶grid-gap : 10px; →격자 간격

 


 

[방법2] 자식에 이름 쓰고 부모는 색칠하기

 

▶ 자식에 이름 쓰려면 gird-are: 이름;

▶더 직관적이고 쉽다.

 

✅ 변경

.grid-nav {
    grid-area: 헤더;
    /* grid-column: 1 / 5; */
}

.grid-sidebar {
    grid-area: 사이드;
    /* grid-row: 2 / 4; */
}

 

✅ grid-container에 추가

    grid-template-rows: 100px 100px 100px;
    grid-template-areas:
    "헤더 헤더 헤더 헤더"
    "사이드 . . ."
    "사이드 . . .";

 

 

 

[HTML]

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <link href="css_grid.css" rel="stylesheet">
    </head>
    <body>

        <div class="grid-container">
            <div class="grid-nav"></div>
            <div class="grid-sidebar"></div>
            <div class="grid-content"></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
        </div>

    </body>
</html>

 

[CSS]

.grid-container {
    display: grid;
    /* 세로칸 개수, 사이즈 */
    grid-template-columns: 100px 100px 100px 100px;
    /* 가로칸 개수, 사이즈 */
    grid-template-rows: 100px 100px 100px;
    grid-template-areas: 
    "헤더 헤더 헤더 헤더"
    "사이드 . . ."
    "사이드 . . .";
}

.grid-container div {
    border: 1px solid black;
}

.grid-nav {
    grid-area: 헤더;
    /* 세로선 1-5까지 차지해주세요 
    grid-column: 1 / 5; */
}

.grid-sidebar {
    grid-area: 사이드;
    /* grid-row: 2 / 4; */
}

.grid-content {
    /* grid-column: 2 / 5;
    grid-row: 2 / 4; */
}