EverGiver

CSS 그리드 레이아웃 본문

Front-End (웹)/반응형 웹과 미디어 쿼리

CSS 그리드 레이아웃

친절한개발초보자 2022. 1. 12. 23:44
728x90
CSS 그리드 레이아웃에서 사용하는 용어

CSS 그리드 레이아웃

  • 그리드 항목을 배치할 때 가로 열(줄)과 세로 행(칼럼)을 모두 사용

 

CSS 그리드 레이아웃 항목을 배치하는 속성

 

  • 그리드 컨테이너를 지정하는 display 속성
    종류 설명
    grid 컨테이너 안의 항목을 블록 레벨 요소로 배치
    inline-grid 컨테이너 안의 항목을 인라인 레벨 요소로 
  • 칼럼과 줄을 지정하는 grid-template-columns, grid-template-rows 속성
    - grid-template-columns 속성
      ▷ 그리드 컨테이너 안에 항목을 배치할 때 칼럼의 크기와 개수를 지정
         (몇 개의 칼럼으로 배치할지, 각 칼럼의 너비를 얼마로 할지 지정)
    - grid-template-rows 속성
      ▷ 그리드 컨테이너 안에 항목을 배치할 때 줄의 크기와 개수를 지정
    #wrapper{
            display:grid;
            grid-template-columns: 200px 200px 200px;	// 너비가 200px인 칼럼 3개
            grid-template-rows:100px;	// 줄 높이 100px
          }
  • 상대적인 크기를 지정하는 fr 단위
    - 그리드 레이아웃에서는 상대적 크기를 지정할 수 있도록 fr(fraction) 단위를 사용한다.
    grid-template-columns:1fr 1fr 1fr;	// 너비가 같은 칼럼을 3개 배치
    grid-template-columns:2fr 1fr 2fr;	// 너비가 2:1:2로 배치​
  • 값이 반복될 때 줄여서 표현할 수 있는 repeat( )함수
    - px이나 fr 단위를 사용하면 똑같은 값을 여러 번 반복해야 한다.

    - CSS 그리드 레이아웃에는 내장된 repeat( )이라는 함수를 사용하면 반복하지 않고 간단하게 표현할 수 있다.
    grid-template-columns:1fr 1fr 1fr;
    
    grid-template-columns: repeat(3, 1fr);
  • 최솟값과 최댓값을 지정하는 minmax( ) 함수
    - minmax() 함수를 사용하면 줄 높이를 고정하지 않고 최솟값과 최댓값을 사용해서 유연하게 지정할 수 있다.
    #wrapper{
          width:600px;
          display:grid;  /* 그리드 컨테이너 지정 */
          grid-template-columns:repeat(3, 1fr);  /* 너비가 같은 칼럼 3개 */
          grid-template-rows: minmax(100px, auto);  /* 줄 높이 최소 100px */
        }​
  • 자동으로 칼럼 개수를 조절하는 auto-fill, auto-fit 값
    - 칼럼의 너빗값과 함께 auto-fill이나 auto-fill을 지정하면 화면 너비에 따라 칼럼 개수를 조절할 수 있다.

    grid-template-columns: repeat(auto-fit, 200px);​
     - auto-fit이나 auto-fill 모두 칼럼 개수를 자동으로 조절해 주므로 화면이 넓어지면 칼럼 개수가 많아지고 반대로 화면이 좁아지면 칼럼 개수가 줄어든다.
    - 두 값의 차이점은 남는 공간을 채울지 말지 여부에 달려있다.
    - auto-fit을 사용하면 화면이 넓을 때에는 남은 공간 없이 꽉 채워서 칼럼을 표시하고, auto-fill을 사용하면 칼럼의 최소 너비만 표시하고 남는 공간은 그대로 둔다.
            #wrapper1 {
                display: grid;
                grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
                /* 화면을 꽉 채울만큼 칼럼 너비를 늘려서 표시 */
                margin-bottom: 20px;
            }
    
            #wrapper2 {
                display: grid;
                grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
                /* 칼럼 최소 너비만큼 채워서 표시 */
            }​
  • 그리드 항목의 간격을 지정하는 grid-column-gap, grid-row-gap, grid-gap 속성
    - 항목과 항목 사이의 간격을 조절
    종류 설명
    grid-column-gap 칼럼과 칼럼 사이의 간격을 지정
    gird-row-gap 줄과 줄 사이의 간격을 지정
    grid-gap 칼럼과 줄 사이의 간격을 한꺼번에 지정
    - 플렉스 박스 레이아웃에서 살펴보았던 justify-content나 align-content 같은 속성을 사용하여 그리드 레이아웃의 항목을 정렬할 수 있다.
  • 그리드 라인을 이용해 배치하기 
    그리드 라인
    - 그리드 라인을 이용해서 그리드 항목을 배치할 수 있다.
    종류 설명 예시
    grid-column-start 칼럼 시작의 라인 번호를 지정한다. grid-column-start: 1
    grid-column-end 칼럼 마지막의 라인 번호를 지정한다. grid-column-end: 1
    grid-column 칼럼 시작 번호와 칼럼 끝 번호 사이에 슬래시(/)를 넣어 사용한다. grid-column: 1/4
    grid-row-start 줄 시작의 라인 번호를 지정한다. grid-row-start: 2
    grid-row-end 줄 마지막의 라인 번호이다. grid-row-end: 4
    grid-row 줄 시작 번호와 끝 번호 사이에 슬래시(/)를 넣어 사용한다. grid-row: 2/4
          .box1 {
          background-color:#3689ff;
          grid-column:1/4;
          }
          .box2 {
          background-color:#00cf12;
          grid-row:2/4;
          /* grid-column:1/2; */
          grid-column-start:1;
          }
          .box3 {
          background-color:#ff9019;
          grid-column:2/4;
          /* grid-row:2/3; */
          grid-row-start:2;
          }
          .box4 {
          background-color:#ffd000;
          grid-column-start:3;
          grid-row-start:3;
          }​

     

    - 항목을 배치할 때 칼럼이나 줄을 하나만 차지할 경우에는 grid-column-start나 grid-row-start 속성을 이용해서 시작 번호만 지정하고 끝 번호는 지정하지 않아도 된다.
  •  템플릿 영역을 만들어 배치하기
    - 템플릿 영역으로 항목을 배치하면 그리드 레이아웃을 만드는 것보다 더 쉽다.
    - 방법
      1. grid-area 속성을 사용해서 각 영역에 템플릿 이름을 지정해준다.
      2. 컨테이너 영역에서 grid-template-areas 속성을 사용해 템플릿 영역을 어떻게 배치할지 지정한다.
         (템플릿 영역을 비워 두려면 그 자리에 마침표(.)를 넣는다.)
      3. 한 줄에 들어갈 템플릿 영역을 큰따옴표("")로 묶어준다.
        <style>
            #wrapper {
                width: 700px;
                display: grid;
                grid-template-columns: repeat(3, 1fr);
                grid-template-rows: repeat(3, 100px);
                grid-template-areas:
                    "box1 box1 box1"
                    "box2 box3 box3"
                    "box2 . box4";
            }
    
            .box {
                padding: 15px;
                color: #fff;
                font-weight: bold;
                text-align: center;
            }
    
            .box1 {
                background-color: #3689ff;
                grid-area: box1;
            }
    
            .box2 {
                background-color: #00cf12;
                grid-area: box2;
            }
    
            .box3 {
                background-color: #ff9019;
                grid-area: box3;
            }
    
            .box4 {
                background-color: #ffd000;
                grid-area: box4;
            }
        </style>​
728x90

'Front-End (웹) > 반응형 웹과 미디어 쿼리' 카테고리의 다른 글

플렉스 박스 레이아웃  (0) 2022.01.12
그리드 레이아웃  (0) 2022.01.11
미디어 쿼리 알아보기  (0) 2022.01.11
반응형 웹  (0) 2022.01.11
Comments