Computer >> 컴퓨터 >  >> 프로그래밍 >> CSS

CSS와 JavaScript만으로 명언 슬라이드쇼 만들기 완벽 가이드

CSS와 JavaScript를 활용하면 별도의 라이브러리 없이도 명언(인용구)이 넘어가는 슬라이드쇼를 손쉽게 구현할 수 있습니다. 이 글에서는 이전·다음 버튼과 하단 내비게이션 도트를 갖춘 인용 슬라이드쇼를 만드는 방법을 전체 예제 코드와 함께 단계별로 살펴보겠습니다.

전체 예제 코드

아래 코드를 그대로 복사해 HTML 파일로 저장한 뒤 브라우저에서 열면 바로 결과를 확인할 수 있습니다.

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style>
    body {
        font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
    }
    h1 {
        text-align: center;
    }
    * {
        box-sizing: border-box;
    }
    .Slide {
        display: none;
    }
    img {
        vertical-align: middle;
        width: 100%;
        height: 400px;
    }
    .slideContainer {
        max-width: 600px;
        margin: 10px;
        position: relative;
        margin: auto;
    }
    .prevBtn, .nextBtn {
        position: absolute;
        top: 50%;
        width: auto;
        padding: 10px;
        background-color: rgb(255, 255, 75);
        color: rgb(50, 0, 116);
        font-weight: bolder;
        font-size: 18px;
    }
    .nextBtn {
        right: -40px;
    }
    .prevBtn {
        left: -40px;
    }
    .Caption {
        color: #500070;
        font-weight: bold;
        font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
        font-size: 25px;
        padding: 8px 12px;
        position: absolute;
        width: 100%;
        text-align: center;
    }
    .Navdot {
        cursor: pointer;
        height: 15px;
        width: 15px;
        margin: 0 2px;
        background-color: rgb(54, 5, 117);
        border-radius: 50%;
        display: inline-block;
        transition: background-color 0.6s ease;
        display: inline-block;
        margin-top: 30px;
    }
    .selected, .Navdot:hover {
        background-color: #d9ff00;
    }
    @media only screen and (max-width: 450px) {
        .prevBtn, .nextBtn, .Caption {
            font-size: 16px;
        }
    }
</style>
</head>
<body>
<h1>Quote slideShow</h1>
<hr />
<div class="slideContainer">
<div class="Slide">
<h1>"The way to get started is to quit talking and begin doing."</h1>
<div class="Caption">- Walt Disney</div>
</div>
<div class="Slide">
<h1>
"If life were predictable it would cease to be life, and be without flavor."
</h1>
<div class="Caption">-Eleanor Roosevelt</div>
</div>
<div class="Slide">
<h1>"Life is what happens when you're busy making other plans."</h1>
<div class="Caption">-John Lennon</div>
</div>
<a class="prevBtn">❮</a>
<a class="nextBtn">❯</a>
</div>
<br />
<div style="text-align:center">
<span class="Navdot" onclick="currentSlide(1)"></span>
<span class="Navdot" onclick="currentSlide(2)"></span>
<span class="Navdot" onclick="currentSlide(3)"></span>
</div>
<script>
    document.querySelector(".prevBtn").addEventListener("click", () => {
        changeSlides(-1);
    });
    document.querySelector(".nextBtn").addEventListener("click", () => {
        changeSlides(1);
    });
    var slideIndex = 1;
    showSlides(slideIndex);
    function changeSlides(n) {
        showSlides((slideIndex += n));
    }
    function currentSlide(n) {
        showSlides((slideIndex = n));
    }
    function showSlides(n) {
        var i;
        var slides = document.getElementsByClassName("Slide");
        var dots = document.getElementsByClassName("Navdot");
        if (n > slides.length) {
            slideIndex = 1;
        }
        if (n < 1) {
            slideIndex = slides.length;
        }
        Array.from(slides).forEach(item => (item.style.display = "none"));
        Array.from(dots).forEach(
            item => (item.className = item.className.replace(" selected", ""))
        );
        slides[slideIndex - 1].style.display = "block";
        dots[slideIndex - 1].className += " selected";
    }
</script>
</body>
</html>

실행 결과

위 코드를 실행하면 다음과 같은 화면이 출력됩니다.

CSS와 JavaScript만으로 명언 슬라이드쇼 만들기 완벽 가이드

코드 동작 원리

예제가 어떻게 작동하는지 핵심 부분만 정리해 보겠습니다.

1. 슬라이드 숨기기

.Slide 클래스에는 기본적으로 display: none;이 적용되어 있어, 페이지가 처음 로드될 때 모든 슬라이드가 숨겨진 상태로 시작합니다.

2. 현재 슬라이드 표시

showSlides() 함수는 전달받은 인덱스에 해당하는 슬라이드만 display: block;으로 변경해 화면에 보여줍니다. 동시에 나머지 슬라이드는 모두 숨기고, 하단 도트(Navdot) 중 현재 위치에 해당하는 것에만 'selected' 클래스를 추가해 색상을 강조합니다.

3. 버튼과 도트로 슬라이드 전환

좌우 화살표 버튼(prevBtn, nextBtn)을 클릭하면 changeSlides(-1) 또는 changeSlides(1)가 호출되어 이전 또는 다음 슬라이드로 이동합니다. 하단의 원형 도트를 클릭하면 currentSlide(n) 함수가 실행되어 원하는 슬라이드로 바로 건너뛸 수 있습니다.

4. 무한 순환 처리

showSlides() 함수 내부에서 인덱스가 슬라이드 개수보다 크면 첫 번째로, 1보다 작으면 마지막 슬라이드로 되돌아가도록 처리했습니다. 덕분에 사용자는 끝없이 앞뒤로 순환하며 슬라이드를 탐색할 수 있습니다.

5. 반응형 대응

미디어 쿼리(@media)를 사용해 화면 폭이 450px 이하인 모바일 환경에서는 버튼과 캡션의 글자 크기를 16px로 줄여 가독성을 확보했습니다.

마무리

이처럼 CSS와 JavaScript만으로도 버튼, 내비게이션 도트, 무한 순환, 반응형 처리까지 갖춘 인용 슬라이드쇼를 만들 수 있습니다. 명언 대신 고객 후기나 포트폴리오 이미지를 넣으면 다양한 용도로 활용할 수 있으니, 색상과 폰트를 자신만의 스타일로 바꿔 응용해 보시기 바랍니다.