Bootstrap Carousel (слайдер)
Как это работает
-
Carousel - это слайд-шоу для циклического просмотра серии контента, созданное с помощью 3D-преобразований CSS и небольшого количества JavaScript. Оно работает с серией изображений, текстом или пользовательской разметкой. Он также включает поддержку предыдущих / следующих элементов управления и индикаторов.
-
По соображениям производительности, карусели необходимо инициализировать вручную с помощью метода конструктора carousel. Без инициализации некоторые прослушиватели событий (в частности, события, требующие поддержки касаний / свайпов) не будут зарегистрированы до тех пор, пока пользователь явно не активирует элемент управления или индикатор.
Единственным исключением являются карусели с автозапуском с
data-bs-ride="carousel"
атрибутом, поскольку они инициализируются автоматически при загрузке страницы. Если вы используете автозапуск carousels с атрибутом data, не инициализируйте явно те же carousels методом конструктора. -
Вложенные карусели не поддерживаются. Вы также должны знать, что карусели в целом часто могут создавать проблемы с удобством использования и доступностью.
prefers-reduced-motion
. Смотрите раздел уменьшенное движение в документации по доступности.Основные примеры
Вот базовый пример карусели с тремя слайдами. Обратите внимание на элементы управления "Предыдущий" / "Cледующий". Рекомендуется использовать элементы <button>
, но вы также можете использовать элементы <a>
с role="button"
.
<div id="carouselExample" class="carousel slide">
<div class="carousel-inner">
<div class="carousel-item active">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
</div>
</div>
<button class="carousel-control-prev" type="button" data-bs-target="#carouselExample" 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="#carouselExample" data-bs-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="visually-hidden">Next</span>
</button>
</div>
Карусели автоматически не нормализуют размеры слайдов. Таким образом, вам может потребоваться использовать дополнительные утилиты или пользовательские стили для соответствующего размера содержимого. Хотя карусели поддерживают предыдущие / следующие элементы управления и индикаторы, они явно не требуются. Добавляйте и настраивайте по своему усмотрению.
Вы должны добавить класс .active
к одному из слайдов, иначе карусель не будет видна. Также не забудьте установить уникальный параметр id
на .carousel
для дополнительных элементов управления, особенно если вы используете несколько каруселей на одной странице. Элементы управления и индикатора должны иметь атрибут data-bs-target
(или href
для ссылок), который соответствует id
из элемента .carousel
.
Индикаторы
Вы можете добавлять индикаторы в карусель вместе с элементами управления "Предыдущий" / "Следующий". Индикаторы позволяют пользователям переходить непосредственно к определенному слайду.
<div id="carouselExampleIndicators" class="carousel slide">
<div class="carousel-indicators">
<button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button>
<button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="1" aria-label="Slide 2"></button>
<button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="2" aria-label="Slide 3"></button>
</div>
<div class="carousel-inner">
<div class="carousel-item active">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
</div>
</div>
<button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleIndicators" 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="#carouselExampleIndicators" data-bs-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="visually-hidden">Next</span>
</button>
</div>
Подписи
Вы можете добавлять подписи к своим слайдам с помощью .carousel-caption
элемента внутри любого .carousel-item
. Их можно легко спрятать на небольших видовых экранах, как показано ниже, с помощью дополнительных утилит отображения. Изначально мы скрываем их с помощью .d-none
и возвращаем на устройства среднего размера с помощью .d-md-block
.
<div id="carouselExampleCaptions" class="carousel slide">
<div class="carousel-indicators">
<button type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button>
<button type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide-to="1" aria-label="Slide 2"></button>
<button type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide-to="2" aria-label="Slide 3"></button>
</div>
<div class="carousel-inner">
<div class="carousel-item active">
<img src="..." class="d-block w-100" alt="...">
<div class="carousel-caption d-none d-md-block">
<h5>Первый слайд label</h5>
<p>Некоторый репрезентативный контент-заполнитель для первого слайда</p>
</div>
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
<div class="carousel-caption d-none d-md-block">
<h5>Второй слайд label</h5>
<p>Некоторый репрезентативный контент-заполнитель для второго слайда</p>
</div>
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
<div class="carousel-caption d-none d-md-block">
<h5>Третий слайд label</h5>
<p>Некоторый репрезентативный контент-заполнитель для третьего слайда</p>
</div>
</div>
</div>
<button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleCaptions" 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="#carouselExampleCaptions" data-bs-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="visually-hidden">Next</span>
</button>
</div>
Кроссфейд
Добавьте .carousel-fade
в карусель, чтобы анимировать слайды с плавным переходом вместо слайда. В зависимости от содержимого вашей карусели (например, слайдов только с текстом), вы можете захотеть добавить .bg-body
или какой-нибудь пользовательский CSS в .carousel-item
для правильного кроссфейдинга.
<div id="carouselExampleFade" class="carousel slide carousel-fade">
<div class="carousel-inner">
<div class="carousel-item active">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
</div>
</div>
<button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleFade" 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="#carouselExampleFade" data-bs-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="visually-hidden">Next</span>
</button>
</div>
Автоматическое воспроизведение каруселей
Вы можете настроить автозапуск каруселей при загрузке страницы, установив для параметра ride
значение carousel
. Автозапуск каруселей автоматически приостанавливается при наведении курсора мыши. Таким поведением можно управлять с помощью опции pause
. В браузерах, поддерживающих API видимости страницы, карусель прекращает работу, когда веб-страница не видна пользователю (например, когда вкладка браузера неактивна или когда окно браузера свернуто).
По соображениям доступности мы рекомендуем избегать использования каруселей с автоматическим воспроизведением. Если на вашей странице действительно есть карусель с автозапуском, мы рекомендуем предоставить дополнительную кнопку или элемент управления для явной приостановки / остановки карусели.
Смотрите Критерий успеха WCAG 2.1 2.2.2 Приостановка, остановка, скрытие.
<div id="carouselExampleAutoplaying" class="carousel slide" data-bs-ride="carousel">
<div class="carousel-inner">
<div class="carousel-item active">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
</div>
</div>
<button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleAutoplaying" 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="#carouselExampleAutoplaying" data-bs-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="visually-hidden">Next</span>
</button>
</div>
Если для параметра ride
установлено значение true
, а не carousel
, карусель не будет автоматически запускаться при загрузке страницы. Вместо этого он запустится только после первого взаимодействия с пользователем.
<div id="carouselExampleRide" class="carousel slide" data-bs-ride="true">
<div class="carousel-inner">
<div class="carousel-item active">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
</div>
</div>
<button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleRide" 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="#carouselExampleRide" data-bs-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="visually-hidden">Next</span>
</button>
</div>
Индивидуальный интервал для класса .carousel-item
Добавьте data-bs-interval=""
в .carousel-item
, чтобы изменить время задержки между автоматическим переходом к следующему элементу.
<div id="carouselExampleInterval" class="carousel slide" data-bs-ride="carousel">
<div class="carousel-inner">
<div class="carousel-item active" data-bs-interval="10000">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item" data-bs-interval="2000">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
</div>
</div>
<button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleInterval" 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="#carouselExampleInterval" data-bs-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="visually-hidden">Next</span>
</button>
</div>
Автоматическое воспроизведение каруселей без элементов управления
Вот карусель только со слайдами. Обратите внимание на наличие .d-block
и .w-100
на изображениях карусели, чтобы предотвратить выравнивание изображений браузером по умолчанию.
<div id="carouselExampleSlidesOnly" class="carousel slide" data-bs-ride="carousel">
<div class="carousel-inner">
<div class="carousel-item active">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
</div>
</div>
</div>
Отключить пролистывание касанием
Карусели поддерживают прокрутку влево / вправо на устройствах с сенсорным экраном для перемещения между слайдами. Это можно отключить, установив для параметра touch
значение false
.
<div id="carouselExampleControlsNoTouching" class="carousel slide" data-bs-touch="false">
<div class="carousel-inner">
<div class="carousel-item active">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
</div>
</div>
<button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleControlsNoTouching" 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="#carouselExampleControlsNoTouching" data-bs-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="visually-hidden">Next</span>
</button>
</div>
Темный вариант
Устарел в версии 5.3.0
Добавьте .carousel-dark
в .carousel
для более темных элементов управления, индикаторов и подписей. Элементы управления инвертируются по сравнению с их заливкой белым цветом по умолчанию с помощью filter
CSS-свойства. Подписи и элементы управления имеют дополнительные переменные Sass, которые настраивают color
и background-color
.
Внимание! Темные варианты компонентов устарели в версии 5.3.0 с введением цветовых режимов. Вместо добавления .carousel-dark
установите data-bs-theme="dark"
для корневого элемента, родительской оболочки или самого компонента.
<div id="carouselExampleDark" class="carousel carousel-dark slide">
<div class="carousel-indicators">
<button type="button" data-bs-target="#carouselExampleDark" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button>
<button type="button" data-bs-target="#carouselExampleDark" data-bs-slide-to="1" aria-label="Slide 2"></button>
<button type="button" data-bs-target="#carouselExampleDark" data-bs-slide-to="2" aria-label="Slide 3"></button>
</div>
<div class="carousel-inner">
<div class="carousel-item active" data-bs-interval="10000">
<img src="..." class="d-block w-100" alt="...">
<div class="carousel-caption d-none d-md-block">
<h5>Первый слайд label</h5>
<p>Некоторый репрезентативный контент-заполнитель для первого слайда</p>
</div>
</div>
<div class="carousel-item" data-bs-interval="2000">
<img src="..." class="d-block w-100" alt="...">
<div class="carousel-caption d-none d-md-block">
<h5>Второй слайд label</h5>
<p>Некоторый репрезентативный контент-заполнитель для второго слайда</p>
</div>
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
<div class="carousel-caption d-none d-md-block">
<h5>Третий слайд label</h5>
<p>Некоторый репрезентативный контент-заполнитель для третьего слайда</p>
</div>
</div>
</div>
<button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleDark" 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="#carouselExampleDark" data-bs-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="visually-hidden">Next</span>
</button>
</div>
Пользовательский переход
Длительность перехода .carousel-item
можно изменить с помощью переменной Sass $carousel-transition-duration
перед компиляцией или пользовательских стилей, если вы используете скомпилированный CSS. Если применяется несколько переходов, убедитесь, что переход transform определен первым (например, transition: transform 2s ease, opacity .5s ease-out
).
CSS
Переменные Sass
Переменные для всех каруселей:
$carousel-control-color: $white;
$carousel-control-width: 15%;
$carousel-control-opacity: .5;
$carousel-control-hover-opacity: .9;
$carousel-control-transition: opacity .15s ease;
$carousel-indicator-width: 30px;
$carousel-indicator-height: 3px;
$carousel-indicator-hit-area-height: 10px;
$carousel-indicator-spacer: 3px;
$carousel-indicator-opacity: .5;
$carousel-indicator-active-bg: $white;
$carousel-indicator-active-opacity: 1;
$carousel-indicator-transition: opacity .6s ease;
$carousel-caption-width: 70%;
$carousel-caption-color: $white;
$carousel-caption-padding-y: 1.25rem;
$carousel-caption-spacer: 1.25rem;
$carousel-control-icon-width: 2rem;
$carousel-control-prev-icon-bg: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/></svg>");
$carousel-control-next-icon-bg: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/></svg>");
$carousel-transition-duration: .6s;
$carousel-transition: transform $carousel-transition-duration ease-in-out; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)
Переменные для темной карусели:
$carousel-dark-indicator-active-bg: $black;
$carousel-dark-caption-color: $black;
$carousel-dark-control-icon-filter: invert(1) grayscale(100);
Использование
С помощью атрибутов данных
Используйте атрибуты данных, чтобы легко управлять положением карусели. data-bs-slide
принимает ключевые слова prev
или next
, которые изменяют положение слайда относительно его текущего положения. В качестве альтернативы можно использовать data-bs-slide-to
для передачи необработанного индекса слайда в carousel data-bs-slide-to="2"
, который сдвигает положение слайда на определенный индекс, начинающийся с 0
.
С помощью JavaScript
Вызовите carousel вручную с помощью:
const carousel = new bootstrap.Carousel('#myCarousel')
Опции
Поскольку параметры могут передаваться через атрибуты данных или JavaScript, вы можете добавить имя параметра к data-bs-
, как в data-bs-animation="{value}"
. При передаче параметров через атрибуты данных обязательно измените регистр имени опции с “camelCase” на “kebab-case”. Например, используйте data-bs-custom-class="beautifier"
вместо data-bs-customClass="beautifier"
.
Начиная с Bootstrap версии 5.2.0, все компоненты поддерживают экспериментальный атрибут зарезервированных данных data-bs-config
, который может содержать простую конфигурацию компонента в виде строки JSON. Когда элемент имеет атрибуты data-bs-config='{"delay":0, "title":123}'
и data-bs-title="456"
, конечным title
значением будет 456
, а отдельные атрибуты данных будут переопределять значения, указанные в data-bs-config
. Кроме того, существующие атрибуты данных могут содержать значения JSON, такие как data-bs-delay='{"show":0,"hide":150}'
.
Конечный объект конфигурации - это объединенный результат data-bs-config
, data-bs-
, и js object
где последнее заданное значение ключа переопределяет остальные.
Имя | Тип | По умолчанию | Описание |
---|---|---|---|
interval |
номер | 5000 |
Время задержки между автоматическим циклированием элемента. |
keyboard |
логическое значение | true |
Должна ли карусель реагировать на события клавиатуры. |
pause |
строка, логическое значение | "hover" |
Если установлено значение "hover" , включение карусели приостанавливается mouseenter и возобновляется включение карусели mouseleave . Если установлено значение false , наведение курсора мыши на карусель не приведет к ее приостановке. На устройствах с сенсорным управлением, если установлено значение "hover" , переключение будет приостановлено на touchend (после завершения взаимодействия пользователя с каруселью) на два интервала, прежде чем автоматически возобновиться. Это в дополнение к поведению мыши. |
ride |
строка, логическое значение | false |
Если установлено значение true , карусель автоматически запускается после того, как пользователь вручную задействует первый элемент. Если установлено значение "carousel" , карусель автоматически запускается при загрузке. |
touch |
логическое значение | true |
Должна ли carousel поддерживать взаимодействие свайпов влево / вправо на устройствах с сенсорным экраном. |
wrap |
логическое значение | true |
Должна ли карусель вращаться непрерывно или иметь жесткие остановки. |
Методы
Вы можете создать экземпляр carousel с помощью конструктора carousel и передать любые дополнительные параметры. Например, чтобы вручную инициализировать карусель с автоматическим воспроизведением (при условии, что вы не используете data-bs-ride="carousel"
атрибут в самой разметке) с определенным интервалом и с отключенной сенсорной поддержкой, вы можете использовать:
const myCarouselElement = document.querySelector('#myCarousel')
const carousel = new bootstrap.Carousel(myCarouselElement, {
interval: 2000,
touch: false
})
Метод | Описание |
---|---|
cycle |
Запускает циклический просмотр элементов карусели слева направо. |
dispose |
Уничтожает карусель элемента. (Удаляет сохраненные данные в элементе DOM) |
getInstance |
Статический метод, позволяющий получить экземпляр carousel, связанный с элементом DOM. Вы можете использовать его следующим образом: bootstrap.Carousel.getInstance(element) . |
getOrCreateInstance |
Статический метод, который возвращает экземпляр carousel, связанный с элементом DOM, или создает новый, если он не был инициализирован. Вы можете использовать его следующим образом: bootstrap.Carousel.getOrCreateInstance(element) . |
next |
Переходит к следующему элементу. Возвращается вызывающему до того, как будет показан следующий элемент (например, до того, как произойдет slid.bs.carousel событие). |
nextWhenVisible |
Не переключайте carousel на next, когда страница, карусель или родительский элемент карусели не видны. Возврат вызывающему до отображения целевого элемента. |
pause |
Останавливает циклическое переключение элементов в карусели. |
prev |
Выполняется циклический переход к предыдущему элементу. Возвращается вызывающему до того, как был показан предыдущий элемент (например, до того, как произошло slid.bs.carousel событие). |
to |
Зацикливает карусель до определенного кадра (на основе 0, аналогично массиву). Возвращается вызывающей стороне до того, как будет показан целевой элемент (например, до того, как произойдет slid.bs.carousel событие). |
Мероприятия
Класс carousel Bootstrap предоставляет два события для подключения к функциональности carousel. Оба события обладают следующими дополнительными свойствами:
direction
: Направление, в котором скользит карусель (либо"left"
, либо"right"
).relatedTarget
: Элемент DOM, который вставляется на место в качестве активного элемента.from
: Индекс текущего элементаto
: Индекс следующего элемента
Все события карусели запускаются в самой карусели (т.е. в <div class="carousel">
).
Тип события | Описание |
---|---|
slid.bs.carousel |
Запускается, когда карусель завершает переход слайдов. |
slide.bs.carousel |
Запускается немедленно при вызове slide метода экземпляра. |
const myCarousel = document.getElementById('myCarousel')
myCarousel.addEventListener('slide.bs.carousel', event => {
// do something...
})