Tailwind CSS 및 Flowbite와 함께 캐러셀 슬라이더를 사용하는 방법

사용자 인터페이스를 구축할 때 가장 좋아하는 프레임워크 중 하나는 Flowbite과 결합된 Tailwind CSS입니다. 유틸리티 우선 접근 방식과 Flowbite의 구성 요소 때문입니다.



오늘은 Tailwind CSS의 유틸리티 클래스를 사용하여 빌드된 carousel slider component from Flowbite을 사용하는 방법을 보여드리고자 합니다.

시작하자!

Tailwind CSS 캐러셀



캐러셀 구성요소를 시작하는 가장 쉬운 방법은 Tailwind CSS 프로젝트 내에 플러그인으로 Flowbite를 설치한 다음 JS 파일을 포함하는 것입니다.

quickstart guide을 따라 다음 항목을 추가해야 합니다.
  • 다음 명령을 실행하여 NPM을 사용하여 Flowbite를 종속 항목으로 설치합니다.

  • npm i flowbite
    


  • tailwind.config.js 파일 내 플러그인으로 Flowbite가 필요합니다.

  • module.exports = {
    
        plugins: [
            require('flowbite/plugin')
        ]
    
    }
    


  • 대화형 요소가 작동하도록 기본 JavaScript 파일을 포함합니다.

  • <script src="../path/to/flowbite/dist/flowbite.js"></script>
    


  • 자체 콘텐츠 데이터에 추가로 tailwind.config.js 파일의 대화형 요소에서 클래스를 적용하려면 flowbite를 추가해야 합니다.

  • module.exports = {
    
        content: [
            "./node_modules/flowbite/**/*.js"
        ]
    
    }
    


    이제 Flowbite를 설치했으므로 회전식 슬라이더와 같은 대화형 구성 요소를 사용할 수 있습니다.

    파일 중 하나에서 다음 HTML 코드를 사용하십시오.

    <div id="default-carousel" class="relative" data-carousel="static">
        <!-- Carousel wrapper -->
        <div class="overflow-hidden relative h-56 rounded-lg sm:h-64 xl:h-80 2xl:h-96">
             <!-- Item 1 -->
            <div class="hidden duration-700 ease-in-out" data-carousel-item>
                <span class="absolute top-1/2 left-1/2 text-2xl font-semibold text-white -translate-x-1/2 -translate-y-1/2 sm:text-3xl dark:text-gray-800">First Slide</span>
                <img src="/docs/images/carousel/carousel-1.svg" class="block absolute top-1/2 left-1/2 w-full -translate-x-1/2 -translate-y-1/2" alt="...">
            </div>
            <!-- Item 2 -->
            <div class="hidden duration-700 ease-in-out" data-carousel-item>
                <img src="/docs/images/carousel/carousel-2.svg" class="block absolute top-1/2 left-1/2 w-full -translate-x-1/2 -translate-y-1/2" alt="...">
            </div>
            <!-- Item 3 -->
            <div class="hidden duration-700 ease-in-out" data-carousel-item>
                <img src="/docs/images/carousel/carousel-3.svg" class="block absolute top-1/2 left-1/2 w-full -translate-x-1/2 -translate-y-1/2" alt="...">
            </div>
        </div>
        <!-- Slider indicators -->
        <div class="flex absolute bottom-5 left-1/2 z-30 space-x-3 -translate-x-1/2">
            <button type="button" class="w-3 h-3 rounded-full" aria-current="false" aria-label="Slide 1" data-carousel-slide-to="0"></button>
            <button type="button" class="w-3 h-3 rounded-full" aria-current="false" aria-label="Slide 2" data-carousel-slide-to="1"></button>
            <button type="button" class="w-3 h-3 rounded-full" aria-current="false" aria-label="Slide 3" data-carousel-slide-to="2"></button>
        </div>
        <!-- Slider controls -->
        <button type="button" class="flex absolute top-0 left-0 z-30 justify-center items-center px-4 h-full cursor-pointer group focus:outline-none" data-carousel-prev>
            <span class="inline-flex justify-center items-center w-8 h-8 rounded-full sm:w-10 sm:h-10 bg-white/30 dark:bg-gray-800/30 group-hover:bg-white/50 dark:group-hover:bg-gray-800/60 group-focus:ring-4 group-focus:ring-white dark:group-focus:ring-gray-800/70 group-focus:outline-none">
                <svg class="w-5 h-5 text-white sm:w-6 sm:h-6 dark:text-gray-800" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 19l-7-7 7-7"></path></svg>
                <span class="hidden">Previous</span>
            </span>
        </button>
        <button type="button" class="flex absolute top-0 right-0 z-30 justify-center items-center px-4 h-full cursor-pointer group focus:outline-none" data-carousel-next>
            <span class="inline-flex justify-center items-center w-8 h-8 rounded-full sm:w-10 sm:h-10 bg-white/30 dark:bg-gray-800/30 group-hover:bg-white/50 dark:group-hover:bg-gray-800/60 group-focus:ring-4 group-focus:ring-white dark:group-focus:ring-gray-800/70 group-focus:outline-none">
                <svg class="w-5 h-5 text-white sm:w-6 sm:h-6 dark:text-gray-800" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"></path></svg>
                <span class="hidden">Next</span>
            </span>
        </button>
    </div>
    


    보시다시피 데이터 속성을 사용하여 캐러셀 구성 요소는 자동으로 다음, 이전 버튼 및 표시기를 기반으로 작동합니다.

    모달 요소의 데이터 속성data-carousel="slide"을 사용하여 자동으로 순환되도록 할 수 있습니다.

    자바스크립트



    데이터 속성을 사용하는 대신 JavaScript에서 직접 캐러셀 구성 요소를 만들 수도 있습니다.

    먼저 다음 HTML 마크업을 추가합니다.

    <div class="relative">
        <!-- Carousel wrapper -->
        <div class="overflow-hidden relative h-56 rounded-lg sm:h-64 xl:h-80 2xl:h-96">
             <!-- Item 1 -->
            <div id="carousel-item-1" class="hidden duration-700 ease-in-out">
                <span class="absolute top-1/2 left-1/2 text-2xl font-semibold text-white -translate-x-1/2 -translate-y-1/2 sm:text-3xl dark:text-gray-800">First Slide</span>
                <img src="/docs/images/carousel/carousel-1.svg" class="block absolute top-1/2 left-1/2 w-full -translate-x-1/2 -translate-y-1/2" alt="...">
            </div>
            <!-- Item 2 -->
            <div id="carousel-item-2" class="hidden duration-700 ease-in-out">
                <img src="/docs/images/carousel/carousel-2.svg" class="block absolute top-1/2 left-1/2 w-full -translate-x-1/2 -translate-y-1/2" alt="...">
            </div>
            <!-- Item 3 -->
            <div id="carousel-item-3" class="hidden duration-700 ease-in-out">
                <img src="/docs/images/carousel/carousel-3.svg" class="block absolute top-1/2 left-1/2 w-full -translate-x-1/2 -translate-y-1/2" alt="...">
            </div>
            <!-- Item 4 -->
            <div id="carousel-item-4" class="hidden duration-700 ease-in-out">
                <img src="/docs/images/carousel/carousel-4.svg" class="block absolute top-1/2 left-1/2 w-full -translate-x-1/2 -translate-y-1/2" alt="...">
            </div>
        </div>
        <!-- Slider indicators -->
        <div class="flex absolute bottom-5 left-1/2 z-30 space-x-3 -translate-x-1/2">
            <button id="carousel-indicator-1" type="button" class="w-3 h-3 rounded-full" aria-current="true" aria-label="Slide 1"></button>
            <button id="carousel-indicator-2" type="button" class="w-3 h-3 rounded-full" aria-current="false" aria-label="Slide 2"></button>
            <button id="carousel-indicator-3" type="button" class="w-3 h-3 rounded-full" aria-current="false" aria-label="Slide 3"></button>
            <button id="carousel-indicator-4" type="button" class="w-3 h-3 rounded-full" aria-current="false" aria-label="Slide 4"></button>
        </div>
        <!-- Slider controls -->
        <button id="data-carousel-prev" type="button" class="flex absolute top-0 left-0 z-30 justify-center items-center px-4 h-full cursor-pointer group focus:outline-none">
            <span class="inline-flex justify-center items-center w-8 h-8 rounded-full sm:w-10 sm:h-10 bg-white/30 dark:bg-gray-800/30 group-hover:bg-white/50 dark:group-hover:bg-gray-800/60 group-focus:ring-4 group-focus:ring-white dark:group-focus:ring-gray-800/70 group-focus:outline-none">
                <svg class="w-5 h-5 text-white sm:w-6 sm:h-6 dark:text-gray-800" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 19l-7-7 7-7"></path></svg>
                <span class="hidden">Previous</span>
            </span>
        </button>
        <button id="data-carousel-next" type="button" class="flex absolute top-0 right-0 z-30 justify-center items-center px-4 h-full cursor-pointer group focus:outline-none">
            <span class="inline-flex justify-center items-center w-8 h-8 rounded-full sm:w-10 sm:h-10 bg-white/30 dark:bg-gray-800/30 group-hover:bg-white/50 dark:group-hover:bg-gray-800/60 group-focus:ring-4 group-focus:ring-white dark:group-focus:ring-gray-800/70 group-focus:outline-none">
                <svg class="w-5 h-5 text-white sm:w-6 sm:h-6 dark:text-gray-800" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"></path></svg>
                <span class="hidden">Next</span>
            </span>
        </button>
    </div>
    


    보시다시피 데이터 속성을 사용하지 않았지만 JS에서 직접 Carousel 객체를 초기화해야 합니다.

    Carousel 객체에 매개변수로 전달될 다음 상수를 만듭니다.

    const items = [
        {
            position: 0,
            el: document.getElementById('carousel-item-1')
        },
        {
            position: 1,
            el: document.getElementById('carousel-item-2')
        },
        {
            position: 2,
            el: document.getElementById('carousel-item-3')
        },
        {
            position: 3,
            el: document.getElementById('carousel-item-4')
        },
    ];
    
    const options = {
        activeItemPosition: 1,
        interval: 3000,
    
        indicators: {
            activeClasses: 'bg-white dark:bg-gray-800',
            inactiveClasses: 'bg-white/50 dark:bg-gray-800/50 hover:bg-white dark:hover:bg-gray-800',
            items: [
                {
                    position: 0,
                    el: document.getElementById('carousel-indicator-1')
                },
                {
                    position: 1,
                    el: document.getElementById('carousel-indicator-2')
                },
                {
                    position: 2,
                    el: document.getElementById('carousel-indicator-3')
                },
                {
                    position: 3,
                    el: document.getElementById('carousel-indicator-4')
                },
            ]
        },
    
        // callback functions
        onNext: () => {
            console.log('next slider item is shown');
        },
        onPrev: ( ) => {
            console.log('previous slider item is shown);
        },
        onChange: ( ) => {
            console.log('new slider item has been shown');
        }
    };
    


    이제 새 Carousel 개체를 만들 수 있습니다.

    const carousel = new Carousel(items, options);
    


    이제 next 또는 prev와 같은 방법을 사용하여 프로그래밍 방식으로 현재 항목을 오른쪽이나 왼쪽으로 슬라이드할 수 있습니다.

    // goes to the next (right) slide
    carousel.next()
    
    // goes to the previous (left) slide
    carousel.prev()
    

    slideTo 메서드를 사용하여 현재 활성 슬라이더 항목을 원하는 위치로 변경할 수도 있습니다.

    // jumps to the 3rd position (position starts from 0)
    carousel.slideTo(2)
    


    슬라이더를 자동으로 순환하거나 일시중지할 수도 있습니다.

    // starts or resumes the carousel cycling (automated sliding)
    carousel.cycle()
    
    // pauses the cycling (automated sliding)
    carousel.pause()
    


    모든 옵션과 예제에 대해 알아보려면 Flowbite의 공식Tailwind CSS carousel 구성 요소 페이지를 확인하십시오.

    좋은 웹페이지 즐겨찾기