Skip to content
RefineUI

Carousel

Image or card slider carousel.

01Overview
02Motion
03Compose

Overview

Machine-readable contract from Component Spec.

component: carouselexport: Carouselversion: 1attributes: data-refineui=carousel

Anatomy

Partdata-refineui
rootcarousel
controlscarousel-controls
indicatorcarousel-indicator
indicator_hitscarousel-indicator-hits
indicator_thumbcarousel-indicator-thumb
indicatorscarousel-indicators
itemcarousel-item
navcarousel-nav
trackcarousel-track
viewportcarousel-viewport

States

ScopeCategoryValues
componentpseudofocus-visible
componentenvironmentforced-colors, dir

Accessibility

SlotElementRoleRequired attributes
carouseldiv
carousel-itemdivgroup
carousel-indicatorbuttontabaria-selected: required=true, type: boolean

Keyboard

KeyActionNative
ArrowRightnext-trigger
ArrowLeftprevious-trigger
Homefirst-trigger
Endlast-trigger

Focus

SectionPropertyValue
visualrequiredtrue
visualselector:focus-visible

Layout

PropertyValue
directionlogical
rtltrue
npm install @refineui/react @refineui/tokens
import {
Carousel,
CarouselContent,
CarouselItem,
CarouselControls,
CarouselPrevious,
CarouselNext,
CarouselIndicators
} from "@refineui/react";
<Carousel>
<CarouselContent>
<CarouselItem>
<img src="/slide1.jpg" alt="Slide 1" />
</CarouselItem>
<CarouselItem>
<img src="/slide2.jpg" alt="Slide 2" />
</CarouselItem>
<CarouselItem>
<img src="/slide3.jpg" alt="Slide 3" />
</CarouselItem>
</CarouselContent>
<CarouselControls>
<CarouselPrevious />
<CarouselNext />
</CarouselControls>
<CarouselIndicators />
</Carousel>
<Carousel
index={currentIndex}
onIndexChange={setCurrentIndex}
loop
/>
PropDefaultTypeDescription
indexnumberControlled slide index (0-based).
defaultIndex0numberUncontrolled initial index.
onIndexChange(index: number) => voidEvent handler when slide changes.
loopfalsebooleanWrap from last to first / first to last.

Slides container.

Individual slide.

Container for navigation buttons.

Previous slide button.

Next slide button.

Dot indicators for slides.