mirror of
https://github.com/tabler/tabler.git
synced 2026-10-12 13:17:00 +04:00
279 lines
15 KiB
Plaintext
279 lines
15 KiB
Plaintext
---
|
|
title: Carousel
|
|
summary: A carousel shows several images or slides in the space of one, with arrows, indicators and captions.
|
|
description: Display multiple images or slides in a compact carousel with indicators, captions, and automatic or manual navigation.
|
|
related: [/ui/plugins/inline-player]
|
|
source: core/scss/ui/_carousel.scss
|
|
sass-vars: carousel
|
|
classnames:
|
|
component:
|
|
- class: carousel
|
|
desc: Container element
|
|
part:
|
|
- class: carousel-inner
|
|
desc: Wrapper around the slides
|
|
- class: carousel-item
|
|
desc: One slide
|
|
- class: carousel-caption
|
|
desc: Text block over a slide
|
|
- class: carousel-indicators
|
|
desc: Row of buttons that jump to a slide
|
|
- class: carousel-control-prev
|
|
desc: Previous control; use a button so it can take focus
|
|
- class: carousel-control-next
|
|
desc: Next control
|
|
style:
|
|
- class: carousel-caption-background
|
|
desc: Adds a scrim behind the caption
|
|
- class: carousel-indicators-dot
|
|
desc: Round dot indicators
|
|
- class: carousel-indicators-thumb
|
|
desc: Thumbnail indicators
|
|
- class: carousel-indicators-vertical
|
|
desc: Stacks the indicators down the side
|
|
behavior:
|
|
- class: carousel-fade
|
|
desc: Crossfades between slides instead of sliding
|
|
---
|
|
import Example from '@components/Example.astro';
|
|
|
|
## Default markup
|
|
|
|
The default carousel slides on its own and has an arrow on each side for going to the previous or the next slide.
|
|
|
|
<Example>
|
|
<div id="carousel-sample" class="carousel slide" data-bs-ride="carousel">
|
|
<div class="carousel-indicators">
|
|
<button type="button" data-bs-target="#carousel-sample" data-bs-slide-to="0" aria-label="Slide 1" aria-current="true" class="active"></button>
|
|
<button type="button" data-bs-target="#carousel-sample" data-bs-slide-to="1" aria-label="Slide 2"></button>
|
|
<button type="button" data-bs-target="#carousel-sample" data-bs-slide-to="2" aria-label="Slide 3"></button>
|
|
<button type="button" data-bs-target="#carousel-sample" data-bs-slide-to="3" aria-label="Slide 4"></button>
|
|
<button type="button" data-bs-target="#carousel-sample" data-bs-slide-to="4" aria-label="Slide 5"></button>
|
|
</div>
|
|
<div class="carousel-inner">
|
|
<div class="carousel-item active">
|
|
<img class="d-block w-100" alt="" src="/static/photos/city-lights-reflected-in-the-water-at-night.jpg" />
|
|
</div>
|
|
<div class="carousel-item">
|
|
<img class="d-block w-100" alt="" src="/static/photos/color-palette-guide-sample-colors-catalog-.jpg" />
|
|
</div>
|
|
<div class="carousel-item">
|
|
<img class="d-block w-100" alt="" src="/static/photos/finances-us-dollars-and-bitcoins-currency-money.jpg" />
|
|
</div>
|
|
<div class="carousel-item">
|
|
<img class="d-block w-100" alt="" src="/static/photos/tropical-palm-leaves-floral-pattern-background.jpg" />
|
|
</div>
|
|
<div class="carousel-item">
|
|
<img class="d-block w-100" alt="" src="/static/photos/young-woman-working-in-a-cafe.jpg" />
|
|
</div>
|
|
</div>
|
|
<button class="carousel-control-prev" type="button" data-bs-target="#carousel-sample" data-bs-slide="prev">
|
|
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
|
|
<span class="visually-hidden">Previous</span>
|
|
</button>
|
|
<button class="carousel-control-next" type="button" data-bs-target="#carousel-sample" data-bs-slide="next">
|
|
<span class="carousel-control-next-icon" aria-hidden="true"></span>
|
|
<span class="visually-hidden">Next</span>
|
|
</button>
|
|
</div>
|
|
</Example>
|
|
|
|
## Dots indicators
|
|
|
|
You can replace the standard indicators with dots. Just add the `carousel-indicators-dot` class to your carousel:
|
|
|
|
<Example>
|
|
<div id="carousel-indicators-dot" class="carousel slide carousel-fade" data-bs-ride="carousel">
|
|
<div class="carousel-indicators carousel-indicators-dot">
|
|
<button type="button" data-bs-target="#carousel-indicators-dot" data-bs-slide-to="0" aria-label="Slide 1" aria-current="true" class="active"></button>
|
|
<button type="button" data-bs-target="#carousel-indicators-dot" data-bs-slide-to="1" aria-label="Slide 2"></button>
|
|
<button type="button" data-bs-target="#carousel-indicators-dot" data-bs-slide-to="2" aria-label="Slide 3"></button>
|
|
<button type="button" data-bs-target="#carousel-indicators-dot" data-bs-slide-to="3" aria-label="Slide 4"></button>
|
|
<button type="button" data-bs-target="#carousel-indicators-dot" data-bs-slide-to="4" aria-label="Slide 5"></button>
|
|
</div>
|
|
<div class="carousel-inner">
|
|
<div class="carousel-item active">
|
|
<img class="d-block w-100" alt="" src="/static/photos/stylish-workspace-with-macbook-pro.jpg" />
|
|
</div>
|
|
<div class="carousel-item">
|
|
<img class="d-block w-100" alt="" src="/static/photos/coffee-on-a-table-with-other-items.jpg" />
|
|
</div>
|
|
<div class="carousel-item">
|
|
<img class="d-block w-100" alt="" src="/static/photos/book-on-the-grass.jpg" />
|
|
</div>
|
|
<div class="carousel-item">
|
|
<img class="d-block w-100" alt="" src="/static/photos/a-woman-works-at-a-desk-with-a-laptop-and-a-cup-of-coffee.jpg" />
|
|
</div>
|
|
<div class="carousel-item">
|
|
<img class="d-block w-100" alt="" src="/static/photos/people-by-a-banquet-table-full-with-food.jpg" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</Example>
|
|
|
|
## Thumb indicators
|
|
|
|
Thumbnails work the same way. Add the `carousel-indicators-thumb` class and set a `background-image` on each `[data-bs-target]` element. Thumbnails are square by default; change that with the `ratio` utilities.
|
|
|
|
<Example>
|
|
<div id="carousel-indicators-thumb" class="carousel slide carousel-fade" data-bs-ride="carousel">
|
|
<div class="carousel-indicators carousel-indicators-thumb">
|
|
<button type="button" data-bs-target="#carousel-indicators-thumb" data-bs-slide-to="0" aria-label="Slide 1" aria-current="true" class="ratio ratio-4x3 active" style="background-image: url(/static/photos/group-of-people-sightseeing-in-the-city.jpg)"></button>
|
|
<button type="button" data-bs-target="#carousel-indicators-thumb" data-bs-slide-to="1" aria-label="Slide 2" class="ratio ratio-4x3" style="background-image: url(/static/photos/young-woman-working-in-a-cafe.jpg)"></button>
|
|
<button type="button" data-bs-target="#carousel-indicators-thumb" data-bs-slide-to="2" aria-label="Slide 3" class="ratio ratio-4x3" style=" background-image: url(/static/photos/soft-photo-of-woman-on-the-bed-with-the-book-and-cup-of-coffee-in-hands.jpg); "></button>
|
|
<button type="button" data-bs-target="#carousel-indicators-thumb" data-bs-slide-to="3" aria-label="Slide 4" class="ratio ratio-4x3" style="background-image: url(/static/photos/stylish-workplace-with-computer-at-home.jpg)"></button>
|
|
<button type="button" data-bs-target="#carousel-indicators-thumb" data-bs-slide-to="4" aria-label="Slide 5" class="ratio ratio-4x3" style="background-image: url(/static/photos/stylish-workspace-with-macbook-pro.jpg)"></button>
|
|
</div>
|
|
<div class="carousel-inner">
|
|
<div class="carousel-item active">
|
|
<img class="d-block w-100" alt="" src="/static/photos/group-of-people-sightseeing-in-the-city.jpg" />
|
|
</div>
|
|
<div class="carousel-item">
|
|
<img class="d-block w-100" alt="" src="/static/photos/young-woman-working-in-a-cafe.jpg" />
|
|
</div>
|
|
<div class="carousel-item">
|
|
<img class="d-block w-100" alt="" src="/static/photos/soft-photo-of-woman-on-the-bed-with-the-book-and-cup-of-coffee-in-hands.jpg" />
|
|
</div>
|
|
<div class="carousel-item">
|
|
<img class="d-block w-100" alt="" src="/static/photos/stylish-workplace-with-computer-at-home.jpg" />
|
|
</div>
|
|
<div class="carousel-item">
|
|
<img class="d-block w-100" alt="" src="/static/photos/stylish-workspace-with-macbook-pro.jpg" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</Example>
|
|
|
|
## Vertical indicators
|
|
|
|
Add the `carousel-indicators-vertical` class to stack the indicators on the right side. It combines with the dot and thumbnail classes.
|
|
|
|
<Example>
|
|
<div id="carousel-indicators-dot-vertical" class="carousel slide carousel-fade" data-bs-ride="carousel">
|
|
<div class="carousel-indicators carousel-indicators-vertical carousel-indicators-dot">
|
|
<button type="button" data-bs-target="#carousel-indicators-dot-vertical" data-bs-slide-to="0" aria-label="Slide 1" aria-current="true" class="active"></button>
|
|
<button type="button" data-bs-target="#carousel-indicators-dot-vertical" data-bs-slide-to="1" aria-label="Slide 2"></button>
|
|
<button type="button" data-bs-target="#carousel-indicators-dot-vertical" data-bs-slide-to="2" aria-label="Slide 3"></button>
|
|
<button type="button" data-bs-target="#carousel-indicators-dot-vertical" data-bs-slide-to="3" aria-label="Slide 4"></button>
|
|
<button type="button" data-bs-target="#carousel-indicators-dot-vertical" data-bs-slide-to="4" aria-label="Slide 5"></button>
|
|
</div>
|
|
<div class="carousel-inner">
|
|
<div class="carousel-item active">
|
|
<img class="d-block w-100" alt="" src="/static/photos/man-looking-out-to-sea.jpg" />
|
|
</div>
|
|
<div class="carousel-item">
|
|
<img class="d-block w-100" alt="" src="/static/photos/making-magic-with-fairy-lights.jpg" />
|
|
</div>
|
|
<div class="carousel-item">
|
|
<img class="d-block w-100" alt="" src="/static/photos/finances-us-dollars-and-bitcoins-currency-money-5.jpg" />
|
|
</div>
|
|
<div class="carousel-item">
|
|
<img class="d-block w-100" alt="" src="/static/photos/cup-of-coffee-on-table-in-cafe-2.jpg" />
|
|
</div>
|
|
<div class="carousel-item">
|
|
<img class="d-block w-100" alt="" src="/static/photos/young-woman-sitting-on-the-sofa-and-working-on-her-laptop-2.jpg" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</Example>
|
|
|
|
Thumbnails on the right side:
|
|
|
|
<Example>
|
|
<div id="carousel-indicators-thumb-vertical" class="carousel slide carousel-fade" data-bs-ride="carousel">
|
|
<div class="carousel-indicators carousel-indicators-vertical carousel-indicators-thumb">
|
|
<button type="button" data-bs-target="#carousel-indicators-thumb-vertical" data-bs-slide-to="0" aria-label="Slide 1" aria-current="true" class="ratio ratio-4x3 active" style=" background-image: url(/static/photos/finances-us-dollars-and-bitcoins-currency-money.jpg); "></button>
|
|
<button type="button" data-bs-target="#carousel-indicators-thumb-vertical" data-bs-slide-to="1" aria-label="Slide 2" class="ratio ratio-4x3" style="background-image: url(/static/photos/businesswoman-working-at-her-laptop.jpg)"></button>
|
|
<button type="button" data-bs-target="#carousel-indicators-thumb-vertical" data-bs-slide-to="2" aria-label="Slide 3" class="ratio ratio-4x3" style="background-image: url(/static/photos/color-palette-guide-sample-colors-catalog-.jpg)"></button>
|
|
<button type="button" data-bs-target="#carousel-indicators-thumb-vertical" data-bs-slide-to="3" aria-label="Slide 4" class="ratio ratio-4x3" style=" background-image: url(/static/photos/blue-sofa-with-pillows-in-a-designer-living-room-interior.jpg); "></button>
|
|
<button type="button" data-bs-target="#carousel-indicators-thumb-vertical" data-bs-slide-to="4" aria-label="Slide 5" class="ratio ratio-4x3" style=" background-image: url(/static/photos/beautiful-blonde-woman-on-a-wooden-pier-by-the-lake.jpg); "></button>
|
|
</div>
|
|
<div class="carousel-inner">
|
|
<div class="carousel-item active">
|
|
<img class="d-block w-100" alt="" src="/static/photos/finances-us-dollars-and-bitcoins-currency-money.jpg" />
|
|
</div>
|
|
<div class="carousel-item">
|
|
<img class="d-block w-100" alt="" src="/static/photos/businesswoman-working-at-her-laptop.jpg" />
|
|
</div>
|
|
<div class="carousel-item">
|
|
<img class="d-block w-100" alt="" src="/static/photos/color-palette-guide-sample-colors-catalog-.jpg" />
|
|
</div>
|
|
<div class="carousel-item">
|
|
<img class="d-block w-100" alt="" src="/static/photos/blue-sofa-with-pillows-in-a-designer-living-room-interior.jpg" />
|
|
</div>
|
|
<div class="carousel-item">
|
|
<img class="d-block w-100" alt="" src="/static/photos/beautiful-blonde-woman-on-a-wooden-pier-by-the-lake.jpg" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</Example>
|
|
|
|
## Carousel with captions
|
|
|
|
Put a `.carousel-caption` element inside a `.carousel-item` to add a caption. Add `carousel-caption-background` to lay a dark overlay over the image, so light text stays readable.
|
|
|
|
The captions in this example have the `d-none` class, so they are hidden below the `md` breakpoint.
|
|
|
|
<Example>
|
|
<div id="carousel-captions" class="carousel slide" data-bs-ride="carousel">
|
|
<div class="carousel-inner">
|
|
<div class="carousel-item active">
|
|
<img class="d-block w-100" alt="" src="/static/photos/workplace-with-laptop-on-table-at-home-4.jpg" />
|
|
<div class="carousel-caption-background d-none d-md-block"></div>
|
|
<div class="carousel-caption d-none d-md-block">
|
|
<h3>Slide label</h3>
|
|
<p>Nulla vitae elit libero, a pharetra augue mollis interdum.</p>
|
|
</div>
|
|
</div>
|
|
<div class="carousel-item">
|
|
<img class="d-block w-100" alt="" src="/static/photos/people-watching-a-presentation-in-a-room.jpg" />
|
|
<div class="carousel-caption-background d-none d-md-block"></div>
|
|
<div class="carousel-caption d-none d-md-block">
|
|
<h3>Slide label</h3>
|
|
<p>Nulla vitae elit libero, a pharetra augue mollis interdum.</p>
|
|
</div>
|
|
</div>
|
|
<div class="carousel-item">
|
|
<img class="d-block w-100" alt="" src="/static/photos/people-by-a-banquet-table-full-with-food.jpg" />
|
|
<div class="carousel-caption-background d-none d-md-block"></div>
|
|
<div class="carousel-caption d-none d-md-block">
|
|
<h3>Slide label</h3>
|
|
<p>Nulla vitae elit libero, a pharetra augue mollis interdum.</p>
|
|
</div>
|
|
</div>
|
|
<div class="carousel-item">
|
|
<img class="d-block w-100" alt="" src="/static/photos/books-and-purple-flowers-on-a-wooden-stool-by-the-bed.jpg" />
|
|
<div class="carousel-caption-background d-none d-md-block"></div>
|
|
<div class="carousel-caption d-none d-md-block">
|
|
<h3>Slide label</h3>
|
|
<p>Nulla vitae elit libero, a pharetra augue mollis interdum.</p>
|
|
</div>
|
|
</div>
|
|
<div class="carousel-item">
|
|
<img class="d-block w-100" alt="" src="/static/photos/cup-of-coffee-and-an-open-book.jpg" />
|
|
<div class="carousel-caption-background d-none d-md-block"></div>
|
|
<div class="carousel-caption d-none d-md-block">
|
|
<h3>Slide label</h3>
|
|
<p>Nulla vitae elit libero, a pharetra augue mollis interdum.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<button class="carousel-control-prev" type="button" data-bs-target="#carousel-captions" data-bs-slide="prev">
|
|
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
|
|
<span class="visually-hidden">Previous</span>
|
|
</button>
|
|
<button class="carousel-control-next" type="button" data-bs-target="#carousel-captions" data-bs-slide="next">
|
|
<span class="carousel-control-next-icon" aria-hidden="true"></span>
|
|
<span class="visually-hidden">Next</span>
|
|
</button>
|
|
</div>
|
|
</Example>
|
|
|
|
## Accessibility
|
|
|
|
- Use `button` for the previous and next controls. An `a` without `href` cannot take focus, so the carousel becomes mouse-only.
|
|
- Give every indicator an `aria-label` such as `Slide 3`, and mark the current one with `aria-current="true"`. Without a label a screen reader announces only "button".
|
|
- A carousel that plays on its own moves content out from under the reader. Set `data-bs-ride="false"` or give users a pause control. Bootstrap already pauses on hover and on focus.
|
|
- Keep the slide images meaningful in `alt` text, or leave `alt=""` when the caption already says the same thing.
|
|
- Bootstrap does not move focus when a slide changes, so anything focusable inside a hidden slide is still reachable by keyboard. Keep interactive content out of carousel slides.
|