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
Use the responsive carousel component to allow users to slide through multiple items and navigate between them using the control buttons and indicators.
Choose from multiple examples and options to update the intervals, make the carousel static and set custom control button and indicator by configuring React and the utility classes from Tailwind CSS.
To start using the carousel component you first need to import it from Flowbite React:
'use client';
import { Carousel } from 'flowbite-react';
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 slide={false}>
<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 indicators={false}>
<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"
}
}