J.BF Story
[CSS] grid를 활용한 반응형 레이아웃 본문
'flex'를 활용하여 반응형 레이아웃을 만들던 중 같은 크기의 아이템들을 유동적이고 순차적으로 나열하려고 했을 때, 다음과 같은 문제가 발생했다.
WISH
- 아이템 넓이는 기본 240px
- 아이템들이 화면 크기에 따라 적절하게 정렬되며, 화면에 꽉차게 유동적으로 크기가 변했으면 함
- 모든 아이템의 크기가 동일했으면 함
PROBLEM
- 행에 배치된 아이템들끼리 무조건 화면에 꽉차게 크기를 조정하기 때문에, 행마다 아이템 크기가 다를 수 있음
<style>
.item-box {
display: flex;
gap: 15px 20px;
width: 100%;
flex-wrap: wrap;
}
.item {
border: 3px solid green;
flex: 1 0 240px; /* flex-grow flex-shrink flex-basis */
height: 100px;
line-height: 100px;
text-align: center;
}
</style>
<div class="item-box">
<div class="item">logo1</div>
<div class="item">logo2</div>
<div class="item">logo3</div>
<div class="item">logo4</div>
<div class="item">logo5</div>
<div class="item">logo6</div>
<div class="item">logo7</div>
</div>
이러한 현상은 'flex'가 1차원적으로 한 방향으로만 요소를 배치할 수 있는 특성때문에 발생한 것이다.
(요소 배치 방향 row, column 둘 중에 하나만 선택 가능)
여기서 2차원적으로 가로, 세로 방향을 동시에 설정할 수 있는 'grid'를 사용하면 해결할 수 있다.
구현한 코드는 다음과 같다.
<style>
.item-box {
display: grid;
width: 100%;
gap: 15px 20px;
grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
}
.item {
border: 3px solid green;
height: 100px;
line-height: 100px;
text-align: center;
}
</style>
<div class="item-box">
<div class="item">logo1</div>
<div class="item">logo2</div>
<div class="item">logo3</div>
<div class="item">logo4</div>
<div class="item">logo5</div>
<div class="item">logo6</div>
<div class="item">logo7</div>
</div>
** grid-template-columns: 각 열(track)의 크기 지정
- track: grid 컨테이너의 행/열
- repeat(repeat count, tracks)
- repeat count: track 목록이 반복되어야하는 횟수
- auto-fill: track 개수를 grid 컨테이너, 행/열 크기에 맞게 자동적으로 조절 - tracks: track 크기 설정
- minmax(min, max): track 크기 최소/최댓값
- fr: grid 컨테이너의 여유 공간을 비율로 나눠 설정
- repeat count: track 목록이 반복되어야하는 횟수
참고
'FrontEnd > CSS' 카테고리의 다른 글
[CSS] 스크롤 기능을 유지하면서 스크롤바 없애기 (0) | 2022.07.16 |
---|---|
[CSS] 요소들을 겹쳐놓은 상태에서 뒤에 있는 요소 이벤트 처리 (pointer-events) (0) | 2022.07.14 |
[CSS] position 속성에 따른 요소 쌓임(z-index) 순서 (0) | 2022.07.12 |
[CSS] 가상요소 ::after, ::before에서 사용한 svg에 대하여 width, height를 통한 크기 조정이 안되는 원인 (0) | 2022.07.11 |
[CSS] 가상요소 ::after ::before와 svg를 이용하여 요소 꾸며주기 (background) (0) | 2022.07.10 |
Comments