html,css,js
[html, css, js] 앞으로 덮어쓰는 캐러셀 슬라이더 만들기 (feat. z-index)
코복이
2023. 5. 25. 10:53
728x90
좌,우로 넘어가는 배너가 아닌 CSS의 z-index를 활용하여
앞,뒤로 넘어가는 배너를 만들어보자
1. z-index란?
CSS z-index 속성은 위치 지정 요소와, 그 자손 또는 하위 플렉스 아이템의 Z축 순서를 지정합니다.
더 큰 z-index 값을 가진 요소가 작은 값의 요소 위를 덮습니다.
=== Z축 순서를 정하는 속성이라고 한다.
1) 그럼 Z축은 무엇인가?
보통 X축이 가로, Y 축이 세로일때 앞뒤축이 Z축이다.

2) demo를 통해 z-index의 역할을 알아보자.
- auto는 부모요소의 순서를 그대로 따른다.
- 숫자가 들어갈 경우, 숫자가 높은게 더 앞에서 보이는 것을 알 수 있다.


=== z-index의 숫자를 높이면 앞으로 튀어나온다.
그럼 이걸로 뭘 할 수 있다?
옆으로 넘어가는게 아닌 앞으로 튀어나오는 캐러셀을 만들 수 있다.
2. 만들어보자
1) HTML
- 슬라이드가 되어 줄 이미지 4장을 준비하고
- .wrap>.slides >(a>.slide_item)*4
<div class="wrap">
<div class="slides">
<div class="slide_item"><a href=""><img src="slide/Frame 1.jpg" alt=""></a></div>
<div class="slide_item"><a href=""><img src="slide/Frame 2.jpg" alt=""></a></div>
<div class="slide_item"><a href=""><img src="slide/Frame 3.jpg" alt=""></a></div>
<div class="slide_item"><a href=""><img src="slide/Frame 4.jpg" alt=""></a></div>
</div>
</div>
2) CSS
- z-index로 원래 z-index가 0인데 showing 클래스가 추가되면 1이되어 앞으로 튀어나오는 효과를 준다.
- opacity 와 trasition 을 통해 서서히 나타났다 사라지는 효과를 준다.
/* z-index 활용한 배너 */
.slide_item{
position: absolute;
top: 0;
font-size: 0;
z-index: 0;
opacity: 0;
transition: opacity .2s ease-in-out;
}
.showing{
opacity: 1;
z-index: 1;
}
3) Java Script
- showing 클래스가 들어간 div가 있으면 showing을 없애고 그 다음 형제 div로 넘어가거나 없으면 처음 div를 보여주는 함수를 만든다.
- 넘어가서 형제 div가 있으면 showing 클래스를 넣어준다.
- 다음 형제 div가 없으면 처음 div 로 넘어간다.
- setInterval 로 2초마다 넘어가도록 설정한다.
<script>
const showing_class = "showing";
const first = document.querySelector('.slide_item:first-child');
/* 하나씩 showing 클래스가 생겼다가 없어졌다가 하는 구조 */
const moveSlide = () =>{
const currentSlide = document.querySelector(`.${showing_class}`)
if(currentSlide){
currentSlide.classList.remove(showing_class)
const nextSlide = currentSlide.nextElementSibling;
if(nextSlide){
nextSlide.classList.add(showing_class)
}else{
first.classList.add(showing_class);
}
}else{
first.classList.add(showing_class);
}
}
setInterval(moveSlide, 2000)
</script>
📌개인적으로 헷갈렸던 부분!
const showing_class = "showing";
const currentSlide = document.querySelector(`.${showing_class}`)
쿼리셀렉터로 `.${showing_class}` 하면 클래스가 .showing 인 div가 선택되는데
.classList.add(showing_class); 하면
<div class="slide_item showing"> 이렇게 되잖아
그럼 document.querySelector(`.slide_item ${showing_class}`) 이렇게 해줘야하는거 아닌가?
=== 하나의 태그에 두개 이상의 class 를 담을 때는 띄어쓰기로 구분하여 담으면 된다.
=== 즉, <div class="slide_item showing"> 이게 .slide_item 과 .showing 이라는 뜻이다.
3. 완성
배경 컬러를 다르게 주지 않아서 오퍼시티가 극적으로 보이진 않는다^^:

728x90