React Carousel - Flowbite
Get started with the carousel component to showcase images and content and slide through them using custom controls, intervals, and indicators with React and Tailwind CSS
Table of Contents#
- Default carousel
- Static carousel
- Sliding interval
- Custom controls
- Indicators
- Pause On Hover
- Slider content
- Handle
onSlideChanged
event - Theme
- References
Default carousel#
Use this example by adding a series of images inside of the <Carousel>
component.
- React TypeScript
'use client';
import { Carousel } from 'flowbite-react';
export default function DefaultCarousel() {
return (
<Carousel>
<img
alt="..."
src="https://flowbite.com/docs/images/carousel/carousel-1.svg"
/>
<img
alt="..."
src="https://flowbite.com/docs/images/carousel/carousel-2.svg"
/>
<img
alt="..."
src="https://flowbite.com/docs/images/carousel/carousel-3.svg"
/>
<img
alt="..."
src="https://flowbite.com/docs/images/carousel/carousel-4.svg"
/>
<img
alt="..."
src="https://flowbite.com/docs/images/carousel/carousel-5.svg"
/>
</Carousel>
)
}
Static carousel#
Pass the slide
prop to the carousel component to make it static and disable the automatic sliding functionality. This does not disable the control or indicator buttons.
- React TypeScript
'use client';
import { Carousel } from 'flowbite-react';
export default function StaticCarousel() {
return (
<Carousel>
<img
alt="..."
src="https://flowbite.com/docs/images/carousel/carousel-1.svg"
/>
<img
alt="..."
src="https://flowbite.com/docs/images/carousel/carousel-2.svg"
/>
<img
alt="..."
src="https://flowbite.com/docs/images/carousel/carousel-3.svg"
/>
<img
alt="..."
src="https://flowbite.com/docs/images/carousel/carousel-4.svg"
/>
<img
alt="..."
src="https://flowbite.com/docs/images/carousel/carousel-5.svg"
/>
</Carousel>
)
}
Sliding interval#
Use the slideInterval
prop to set the interval between slides in milliseconds. The default value is 3000
.
- React TypeScript
'use client';
import { Carousel } from 'flowbite-react';
export default function SlidingInterval() {
return (
<Carousel slideInterval={5000}>
<img
alt="..."
src="https://flowbite.com/docs/images/carousel/carousel-1.svg"
/>
<img
alt="..."
src="https://flowbite.com/docs/images/carousel/carousel-2.svg"
/>
<img
alt="..."
src="https://flowbite.com/docs/images/carousel/carousel-3.svg"
/>
<img
alt="..."
src="https://flowbite.com/docs/images/carousel/carousel-4.svg"
/>
<img
alt="..."
src="https://flowbite.com/docs/images/carousel/carousel-5.svg"
/>
</Carousel>
)
}
Custom controls#
Use the leftControl
and rightControl
props to set custom control buttons.
- React TypeScript
'use client';
import { Carousel } from 'flowbite-react';
export default function CustomControls() {
return (
<Carousel
leftControl="left"
rightControl="right"
>
<img
alt="..."
src="https://flowbite.com/docs/images/carousel/carousel-1.svg"
/>
<img
alt="..."
src="https://flowbite.com/docs/images/carousel/carousel-2.svg"
/>
<img
alt="..."
src="https://flowbite.com/docs/images/carousel/carousel-3.svg"
/>
<img
alt="..."
src="https://flowbite.com/docs/images/carousel/carousel-4.svg"
/>
<img
alt="..."
src="https://flowbite.com/docs/images/carousel/carousel-5.svg"
/>
</Carousel>
)
}
Indicators#
Add custom indicators or disable them by passing the indicators
prop to the <Carousel>
component.
- React TypeScript
'use client';
import { Carousel } from 'flowbite-react';
export default function Indicators() {
return (
<>
<Carousel>
<img
alt="..."
src="https://flowbite.com/docs/images/carousel/carousel-1.svg"
/>
<img
alt="..."
src="https://flowbite.com/docs/images/carousel/carousel-2.svg"
/>
<img
alt="..."
src="https://flowbite.com/docs/images/carousel/carousel-3.svg"
/>
<img
alt="..."
src="https://flowbite.com/docs/images/carousel/carousel-4.svg"
/>
<img
alt="..."
src="https://flowbite.com/docs/images/carousel/carousel-5.svg"
/>
</Carousel>
<Carousel>
<img
alt="..."
src="https://flowbite.com/docs/images/carousel/carousel-1.svg"
/>
<img
alt="..."
src="https://flowbite.com/docs/images/carousel/carousel-2.svg"
/>
<img
alt="..."
src="https://flowbite.com/docs/images/carousel/carousel-3.svg"
/>
<img
alt="..."
src="https://flowbite.com/docs/images/carousel/carousel-4.svg"
/>
<img
alt="..."
src="https://flowbite.com/docs/images/carousel/carousel-5.svg"
/>
</Carousel>
</>
)
}
Pause On Hover#
To conditionally pause the carousel on mouse hover (desktop), or touch and hold (mobile), you can use the pauseOnHover
property on the <Carousel>
component. Default value is false
.
- React TypeScript
'use client';
import { Carousel } from 'flowbite-react';
export default function PauseOnHovering() {
return (
<Carousel pauseOnHover>
<img
alt="..."
src="https://flowbite.com/docs/images/carousel/carousel-1.svg"
/>
<img
alt="..."
src="https://flowbite.com/docs/images/carousel/carousel-2.svg"
/>
<img
alt="..."
src="https://flowbite.com/docs/images/carousel/carousel-3.svg"
/>
<img
alt="..."
src="https://flowbite.com/docs/images/carousel/carousel-4.svg"
/>
<img
alt="..."
src="https://flowbite.com/docs/images/carousel/carousel-5.svg"
/>
</Carousel>
)
}
Slider content#
Instead of images you can also use any type of markup and content inside the carousel such as simple text.
- React TypeScript
'use client';
import { Carousel } from 'flowbite-react';
export default function SlideAsAnything() {
return (
<Carousel>
<div className="flex h-full items-center justify-center bg-gray-400 dark:bg-gray-700 dark:text-white">
Slide 1
</div>
<div className="flex h-full items-center justify-center bg-gray-400 dark:bg-gray-700 dark:text-white">
Slide 2
</div>
<div className="flex h-full items-center justify-center bg-gray-400 dark:bg-gray-700 dark:text-white">
Slide 3
</div>
</Carousel>
)
}
Handle onSlideChanged
event#
To hook events to slide changed you can use onSlideChange
property.
- React TypeScript
'use client';
import { Carousel } from 'flowbite-react';
export default function SlideChangeEvent() {
return (
<Carousel onSlideChange={(slideIdx)=>console.log(slideIdx)}>
<div className="flex h-full items-center justify-center bg-gray-400 dark:bg-gray-700 dark:text-white">
Slide 1
</div>
<div className="flex h-full items-center justify-center bg-gray-400 dark:bg-gray-700 dark:text-white">
Slide 2
</div>
<div className="flex h-full items-center justify-center bg-gray-400 dark:bg-gray-700 dark:text-white">
Slide 3
</div>
</Carousel>
)
}
Theme#
To learn more about how to customize the appearance of components, please see the Theme docs.
{
"root": {
"base": "relative h-full w-full",
"leftControl": "absolute top-0 left-0 flex h-full items-center justify-center px-4 focus:outline-none",
"rightControl": "absolute top-0 right-0 flex h-full items-center justify-center px-4 focus:outline-none"
},
"indicators": {
"active": {
"off": "bg-white/50 hover:bg-white dark:bg-gray-800/50 dark:hover:bg-gray-800",
"on": "bg-white dark:bg-gray-800"
},
"base": "h-3 w-3 rounded-full",
"wrapper": "absolute bottom-5 left-1/2 flex -translate-x-1/2 space-x-3"
},
"item": {
"base": "absolute top-1/2 left-1/2 block w-full -translate-x-1/2 -translate-y-1/2",
"wrapper": "w-full flex-shrink-0 transform cursor-grab snap-center"
},
"control": {
"base": "inline-flex h-8 w-8 items-center justify-center rounded-full bg-white/30 group-hover:bg-white/50 group-focus:outline-none group-focus:ring-4 group-focus:ring-white dark:bg-gray-800/30 dark:group-hover:bg-gray-800/60 dark:group-focus:ring-gray-800/70 sm:h-10 sm:w-10",
"icon": "h-5 w-5 text-white dark:text-gray-800 sm:h-6 sm:w-6"
},
"scrollContainer": {
"base": "flex h-full snap-mandatory overflow-y-hidden overflow-x-scroll scroll-smooth rounded-lg",
"snap": "snap-x"
}
}