GitHub 560+

Carousel

A carousel with motion and swipe built using Embla.

1
2
3
4
5

About

The carousel is built with Embla Carousel for motion and swipe. The Astro components follow the same composition as shadcn/ui.

Installation

Install the component from the @fulldev registry with the shadcn CLI:

npx shadcn@latest add @fulldev/carousel

Manual install:

npm install embla-carousel

Then copy the component files into src/components/ui/carousel and update the imports to match your project structure.

Usage

import {
  Carousel,
  CarouselContent,
  CarouselItem,
  CarouselNext,
  CarouselPrevious,
} from "@/components/ui/carousel"
<Carousel>
  <CarouselContent>
    <CarouselItem>...</CarouselItem>
    <CarouselItem>...</CarouselItem>
    <CarouselItem>...</CarouselItem>
  </CarouselContent>
  <CarouselPrevious />
  <CarouselNext />
</Carousel>

Composition

Use the following composition to build a Carousel:

Carousel
├── CarouselContent
│   ├── CarouselItem
│   └── CarouselItem
├── CarouselPrevious
└── CarouselNext

Examples

Sizes

To set the size of the items, use the basis utility classes on <CarouselItem />.

1
2
3
4
5
<!-- 33% of the carousel width -->
<Carousel>
  <CarouselContent>
    <CarouselItem class="basis-1/3">...</CarouselItem>
    <CarouselItem class="basis-1/3">...</CarouselItem>
    <CarouselItem class="basis-1/3">...</CarouselItem>
  </CarouselContent>
</Carousel>
<!-- 50% on small screens and 33% on larger screens -->
<Carousel>
  <CarouselContent>
    <CarouselItem class="md:basis-1/2 lg:basis-1/3">...</CarouselItem>
    <CarouselItem class="md:basis-1/2 lg:basis-1/3">...</CarouselItem>
    <CarouselItem class="md:basis-1/2 lg:basis-1/3">...</CarouselItem>
  </CarouselContent>
</Carousel>

Spacing

To set spacing between items, use matching negative margin classes on <CarouselContent /> and padding classes on <CarouselItem />.

Slide 1
Slide 2
Slide 3
Slide 4
<Carousel>
  <CarouselContent class="-ml-4">
    <CarouselItem class="pl-4">...</CarouselItem>
    <CarouselItem class="pl-4">...</CarouselItem>
    <CarouselItem class="pl-4">...</CarouselItem>
  </CarouselContent>
</Carousel>
<Carousel>
  <CarouselContent class="-ml-2 md:-ml-4">
    <CarouselItem class="pl-2 md:pl-4">...</CarouselItem>
    <CarouselItem class="pl-2 md:pl-4">...</CarouselItem>
    <CarouselItem class="pl-2 md:pl-4">...</CarouselItem>
  </CarouselContent>
</Carousel>

API Reference

See the GitHub source code for more information on props.

See the Embla docs for more information on interactivity.