inblog logo
|
jay0628
    HTML/CSS

    [CSS] 7. Grid-Layout

    김주희's avatar
    김주희
    Mar 10, 2025
    [CSS] 7. Grid-Layout
    Contents
    1. Grid VS Flex2. Grid3. grid-template-columns4. grid-gap5. flex로 박스 내 비율을 직접 작성하여 설정하기6. grid-column & grid-row7. 예제

    1. Grid VS Flex

    1. Flex

    1. 한 방향 레이아웃 (가로 또는 세로)

      2. Grid

      1. 두 방향 레이아웃 (가로 & 세로)
         

        2. Grid

        1. display 속성 중 하나
        1. display : grid; 로 지정
        1. 그리드 컨테이너 : 그리드 전체 영역으로 그리드 아이템을 담고 있다.
        1. 그리드 아이템 : 그리드 컨테이너의 자식으로 그리드 규칙에 의해 배치된다.
        1. 그리드 라인 : 그리드 셀을 구분하는 선 (가로선, 세로선 둘 다 포함)
        1. 그리드 트랙 : 그리드의 열 또는 행
        1. 그리드 셀 : 그리드 한 칸
        1. 그리드 영역 : 그리드 라인으로 둘러싸인 사각형 영역이자 셀의 집합
        1. 그리드 번호(number) : 그리드 라인의 각 번호

        3. grid-template-columns

        1. 명시적 열(트랙)의 크기 지정
        1. 여러가지 단위 지원 : fr/ px / repeat함수 … (섞어서 사용 가능)
          1. 1fr 1fr 1fr = 1 : 1 : 1 = 1/3 1/3 1/3
        1. columns 부분에 rows를 넣으면 명시적 행(track)의 크기 지정

        4. grid-gap

        1. grid 셀 사이의 간격
        1. 행/열 지정 순서 :
          1. 세로축 / 가로축
          2. row-gap (행 사이의 간격) column-gap (열 사이의 간격) 순서
        1. grid-row-gap
        1. grid-column-gap
         
        grid-gap: 20px 5px; (row-gap:20px column-gap:5px)
        <!DOCTYPE html> <html lang="en"> <head> <style> .g-box{ display:grid; grid-template-columns: 1fr 1fr 1fr; grid-gap: 20px 5px; } .g-box div{ border: 1px solid black; } </style> </head> <body> <div class = "g-box"> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> <div>6</div> </div> </body> </html>
         

        5. flex로 박스 내 비율을 직접 작성하여 설정하기

        • flex : 비율값
        <!DOCTYPE html> <html lang="en"> <head> <style> div{ border: 1px solid black; padding: 10px; } .f-box{ display: flex; flex-wrap: wrap; } .b1{ flex: 1; } .b2{ flex: 4; } .b3{ flex: 1; } .b4{ flex: 2; } </style> </head> <body> <div class="f-box"> <div class="b1">1</div> <div class="b2">1</div> <div class="b3">1</div> <div class="b4">1</div> </div> </body> </html>
         
        notion image
         
        ❗
        클래스명 2개 지정 가능
        e.g. <div class = "grid-item item9">9</div>
        ⇒ grid-item 이라는 이름, item9라는 이름

        6. grid-column & grid-row

        1. 각 셀의 영역을 지정한다.
        1. 시작점 / 개수 span
          1. e.g. grid-column: 1 / 4 span;
          2. e.g. grid-row: 1 / 4 span;
        <!DOCTYPE html> <html lang="en"> <head> <style> .grid-container { background-color: #2196F3; padding: 10px; display: grid; grid-template-columns: 1fr 1fr 1fr 1fr; } .grid-item { background-color: #a9d4f7; padding: 20px; border: 1px solid black; } .item9{ grid-column: 1 / 4 span; } </style> </head> <body> <div class = "grid-container"> <div class = "grid-item">1</div> <div class = "grid-item">2</div> <div class = "grid-item">3</div> <div class = "grid-item">4</div> <div class = "grid-item">5</div> <div class = "grid-item">6</div> <div class = "grid-item">7</div> <div class = "grid-item">8</div> <div class = "grid-item item9">9</div> </div> </div> </body> </html>
        notion image
         
        • grid-column = 3 / 2 span 으로 할 경우
        notion image
         
        <!DOCTYPE html> <html lang="en"> <head> <style> .grid-container { background-color: #2196F3; padding: 10px; display: grid; grid-template-columns: 1fr 3fr 1fr; } .grid-item { background-color: #a9d4f7; padding: 20px; border: 1px solid black; } .header{ grid-column: 1 / 3 span; } .footer{ grid-column: 1 / 3 span; } </style> </head> <body> <div class = "grid-container"> <div class = "grid-item header">1</div> <div class = "grid-item nav">2</div> <div class = "grid-item section">3</div> <div class = "grid-item aside">4</div> <div class = "grid-item footer">5</div> </div> </div> </body> </html>
        notion image
         

        7. 예제

        ❗
        아래의 사진처럼 만들어보자!
        notion image
        • grid-row와 grid-column을 둘 다 설정해두는 게 좋다. - > 나중에 무너질 수도 있음
        <!DOCTYPE html> <html lang="en"> <head> <style> .grid-container { background-color: #2196F3; padding: 10px; display:grid; grid-template-columns: repeat(4, 1fr); } .grid-item { background-color: #a9d4f7; padding: 20px; border: 1px solid black; } .header{ grid-column: 1 / 3 span; grid-row: 1 / 1 span; } .aside{ grid-column: 4 / 1 span; grid-row: 1/ 2 span; } .nav{ grid-column: 1 / 1 span; grid-row: 2 / 2 span; } .photo{ grid-column: 2/ 2 span; grid-row: 2 / 1 span; } .section{ grid-column: 2/ 3 span; grid-row: 3 / 1 span; } .footer{ grid-column: 1 / 4 span; grid-row: 4 / 1 span; } </style> </head> <body> <div class = "grid-container"> <div class = "grid-item header">header</div> <div class = "grid-item aside">aside</div> <div class = "grid-item nav">nav</div> <div class = "grid-item photo">photo</div> <div class = "grid-item section">section</div> <div class = "grid-item footer">footer</div> </div> </body> </html>
        notion image
        Share article

        jay0628

        RSS·Powered by Inblog