반응형
Grid 기본코드
<style>
.grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px;
}
.grid div {
grid-column-end: span 1;
grid-row-end: span 1;
border: 2px solid #ffa94d;
border-radius: 5px;
background-color: #ffd8a8;
padding: 1em;
color: #d9480f;
}
</style>
<div class="grid">
<div class="item">Item 1</div>
<div class="item">Item 2</div>
<div class="item">Item 3</div>
<div class="item">Item 4</div>
<div class="item">Item 5</div>
<div class="item">Item 6</div>
<div class="item">Item 7</div>
</div>
특정 칸만 크기 조절
특정 박스만 크기를 다르게 하고 싶다면 grid-column-end (행 크기 조절), grid-row-end (열 크기 조절) 를 이용해 조절하면 된다. 아래의 경우에는 big class를 가진 박스는 가로 3칸중 2칸, 세로로도 2칸씩 차지하도록 하였다.
<style>
.grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px;
}
.grid div {
grid-column-end: span 1;
grid-row-end: span 1;
border: 2px solid #ffa94d;
border-radius: 5px;
background-color: #ffd8a8;
padding: 1em;
color: #d9480f;
}
.grid div.big { //큰박스
grid-column-end: span 2;
grid-row-end: span 2;
}
</style>
<div class="grid">
<div class="item big">Item 1</div>
<div class="item">Item 2</div>
<div class="item">Item 3</div>
<div class="item">Item 4</div>
<div class="item big">Item 5</div>
<div class="item">Item 6</div>
<div class="item">Item 7</div>
</div>
그런데 특정 박스만 크게 하는 경우에, 상황에 따라 여백이 생기는 경우가 있다.
아래 경우에는 Grid를 3칸으로 하였는데, 3n번째 크기를 다르게 하면 바로 윗줄에 여백이 생긴다. (Item 2 옆 공백)
해결방법 1. CSS로 조정하기
여백없이 알아서 채워지도록 하려면 큰박스 다음에 나오는 div를 조정하도록 하면 되는데, 박스 갯수가 몇개나 될지 모르고 하나하나 설정해주는게 여간 번거로운 일이 아니다.
.grid div:nth-child(3).big + div {grid-row: 1;grid-column: 3;}
.grid div:nth-child(6).big + div {grid-row: 2;grid-column: 3;}
.grid div:nth-child(9).big + div {grid-row: 3; grid-column: 3;}
해결방법 2. jQuery로 조정하기
박스가 많거나 css로 일일히 조정하기 어려운 경우, 아래처럼 3n번째 다음에 나오는 박스(Item 7)는 자동으로 3n번째 앞에 3번째 칸에 위치하도록 jQuery로 강제로 조정해준다.
$('.grid > div:nth-child(3n)').each(function () {
if($(this).hasClass("big") === true) {
var num = $(this).index(); //index
var num2 = parseInt(num/3) + 1;
$(this).next("div").css("grid-row", num2);
$(this).next("div").css("grid-column", "3");
$(this).next("div").css("background", "yellow");
}
});
그러면 아래처럼 여백 없이 딱 맞게 조정이 된다.
반응형
'개발 > js·jquery' 카테고리의 다른 글
bxslider 현재 슬라이드에 클래스 추가하기 (0) | 2024.11.26 |
---|---|
스크롤 애니메이션 효과 wow.js (1) | 2024.10.06 |
[에러] Uncaught TypeError: Cannot read properties of undefined (reading 'split') (0) | 2024.08.30 |
[jQuery] input 엔터 시 특정 함수 실행 (0) | 2024.08.12 |
자바스크립트 예약어 (2) | 2024.02.27 |
[jQuery] 새로고침 시 스크롤 위치 맨위로 리셋해주는 스크립트 (4) | 2023.11.19 |
[jQuery] 스크롤 이벤트 / 스크롤 특정 위치에 따라 효과 변경 (4) | 2023.11.19 |
[jQuery] Swiper 슬라이더 버튼 컬러 변경 (Navigation, Pagination) (4) | 2023.11.06 |