Carousel

Examples

Default

A carousel built with Embla Carousel.

1
2
3
4
5
<div class="mx-auto w-full max-w-xs">
  <%= render "ui/carousel" do %>
    <%= render "ui/carousel/content" do %>
      <% 5.times do |i| %>
        <%= render "ui/carousel/item" do %>
          <div class="p-1">
            <div class="flex aspect-square items-center justify-center p-6 border rounded-lg">
              <span class="text-4xl font-semibold"><%= i + 1 %></span>
            </div>
          </div>
        <% end %>
      <% end %>
    <% end %>
    <%= render "ui/carousel/previous" %>
    <%= render "ui/carousel/next" %>
  <% end %>
</div>

Sizes

Set the size of an item using the classes prop.

1
2
3
4
5
<div class="mx-auto w-full max-w-sm">
  <%= render "ui/carousel" do %>
    <%= render "ui/carousel/content" do %>
      <% 5.times do |i| %>
        <%= render "ui/carousel/item", classes: "md:basis-1/2 lg:basis-1/3" do %>
          <div class="p-1">
            <div class="flex aspect-square items-center justify-center p-6 border rounded-lg">
              <span class="text-3xl font-semibold"><%= i + 1 %></span>
            </div>
          </div>
        <% end %>
      <% end %>
    <% end %>
    <%= render "ui/carousel/previous" %>
    <%= render "ui/carousel/next" %>
  <% end %>
</div>

Spacing

Set the spacing between items using the content classes.

1
2
3
4
5
<div class="mx-auto w-full max-w-sm">
  <%= render "ui/carousel" do %>
    <%= render "ui/carousel/content", classes: "-ml-4" do %>
      <% 5.times do |i| %>
        <%= render "ui/carousel/item", classes: "pl-4 md:basis-1/2 lg:basis-1/3" do %>
          <div class="flex aspect-square items-center justify-center p-6 border rounded-lg">
            <span class="text-3xl font-semibold"><%= i + 1 %></span>
          </div>
        <% end %>
      <% end %>
    <% end %>
    <%= render "ui/carousel/previous" %>
    <%= render "ui/carousel/next" %>
  <% end %>
</div>

Orientation Vertical

Use the orientation prop to set a vertical carousel.

1
2
3
4
5
<div class="mx-auto w-full max-w-xs py-16">
  <%= render "ui/carousel", orientation: "vertical", classes: "w-full max-w-xs", opts: { align: "start" } do %>
    <%= render "ui/carousel/content", classes: "-mt-1 h-[200px]" do %>
      <% 5.times do |i| %>
        <%= render "ui/carousel/item", classes: "pt-1 md:basis-1/2" do %>
          <div class="p-1">
            <div class="flex items-center justify-center p-6 border rounded-lg min-h-[120px]">
              <span class="text-3xl font-semibold"><%= i + 1 %></span>
            </div>
          </div>
        <% end %>
      <% end %>
    <% end %>
    <%= render "ui/carousel/previous" %>
    <%= render "ui/carousel/next" %>
  <% end %>
</div>

Autoplay with Loop

Use plugins to enable autoplay and loop functionality.

1
2
3
4
5
<div class="mx-auto w-full max-w-xs">
  <%= render "ui/carousel",
    opts: { loop: true },
    plugins: [
      { name: "autoplay", options: { delay: 2000, stopOnInteraction: false } }
    ] do %>
    <%= render "ui/carousel/content" do %>
      <% 5.times do |i| %>
        <%= render "ui/carousel/item" do %>
          <div class="p-1">
            <div class="flex aspect-square items-center justify-center p-6 border rounded-lg bg-gradient-to-br from-purple-500 to-pink-500">
              <span class="text-4xl font-semibold text-white"><%= i + 1 %></span>
            </div>
          </div>
        <% end %>
      <% end %>
    <% end %>
    <%= render "ui/carousel/previous" %>
    <%= render "ui/carousel/next" %>

Features

  • Custom styling with Tailwind classes
  • ARIA attributes for accessibility
  • Keyboard navigation with arrow keys

API Reference

Carousel

Parameters

NameTypeDefaultDescription
orientationStringhorizontalOrientation (horizontal or vertical)
optsHash{}The opts
pluginsStringnilThe plugins

Content

Item

Next

Previous

Accessibility

Implements the WAI-ARIA Carousel pattern with proper roles, states, and keyboard navigation.

ARIA Attributes

  • aria-roledescription
  • role="region"

Keyboard Shortcuts

KeyDescription
ArrowDownMoves focus to next item
ArrowUpMoves focus to previous item
ArrowLeftMoves focus left or decreases value
ArrowRightMoves focus right or increases value

JavaScript

Stimulus Controller

ui--carousel

Values

NameTypeDescription
orientationStringLayout orientation

Actions

initializeCarouselbuildPluginsapplyOrientationClasseskeydown

Events

EventDescriptionDetail
carousel:initFired when carousel init-