CSS에서 2차원의 레이아웃을 만들어야 할때 Grid 레이아웃을 사용하게 됩니다. Grid와 비슷한 Flex 레이아웃도 있지만 1차원이라는 한계가 있습니다. Grid를 통해서 레이아웃을 구현하면 어떤 장점이 있는지와 사례들에 대해서 살펴보겠습니다.
먼저 Grid 레이아웃의 생김새와 어떻게 만들어지는지에 대해 보겠습니다.
<body>
<div class="grid-container">
<div class="one">1</div>
<div class="two">2</div>
<div class="three">3</div>
<div class="four">4</div>
<div class="five">5</div>
<div class="six">6</div>
</div>
</body>
HTML 문서에서는 위와 같이 여러 <div>
tag들을 담고있는 .grid-container
라는 클래스의 <div>
tag가 있습니다.
.grid-container{
display: grid;
max-width: 940px;
margin: 0 auto;
border-radius: 10px;
grid-template-columns: repeat(3,1fr);
grid-gap: 10px;
grid-auto-rows: minmax(100px, auto);
}
.grid-container>div{
border-radius: 10px;
border : 1px solid maroon;
padding: 1em;
}
.one{
grid-column: 1/3;
grid-row:1;
}
.grid-container
에 적용될 스타일에 보면 display:grid;
라는 속성을 볼 수 있습니다. 해당 속성이 자식 요소들이 Grid의 Item이 되게 합니다. 위의 코드에서 나오는 Grid의 속성들을 살펴보겠습니다.
grid-template-columns
는 Grid의 형태를 정의하는 속성입니다. 위의 스타일 시트에서는 repeat(3,1fr)
로 정의되는데 1fr
은 fraction을 뜻하며 앞의 숫자의 비율대로 크기가 결정됩니다. 예를 들어 grid-template-columns: 1fr 1fr
로 정의된 형태의 Grid는 크기의 비율이1:1인 column 2개를 가진다는 것입니다.
즉, 위의 코드에서 grid-template-columns:repeat(3,1fr)
에서 repeat 함수는 repeat('반복횟수','반복될 값')
형태를 띄기 때문에 1fr 1fr 1fr
형태의 Grid가 만들어지게 됩니다.
grid-auto-rows
는 Grid의 행의 크기를 잡아주는 속성입니다. auto
이기 때문에 row의 개수를 알지못해도 알아서 생성해줍니다. minmax(100px,auto)
는 행의 크기를 최소한 100px
, 더 커져야하면 크기를 자동으로 알맞게 설정해줍니다.
grid-gap
은 Grid 안의 item마다 간격을 지정해줍니다.
grid-column
와 grid-row
는 item에 적용되는 속성들로 영억을 지정해줍니다. 쉽게 이해하기 위해서는 셀을 이해하셔야합니다.
위의 코드에서 grid-column
은 1/3
으로 설정되어있습니다. 여기서 /
는 나눗셈이 아닌 /
앞에 있는 숫자가 grid-column-start
뒤에 오는 숫자가 grid-column-end
를 의미하게 합니다. 위의 그림을 예로 들면 Line1
에서 Line3
까지의 영역이 .one
에 지정됩니다.
코드를 한줄씩 살펴보았으니 이번에는 결과를 한번 보겠습니다.