Bootstrap Spinners (Спиннеры)

Укажите состояние загрузки компонента или страницы с помощью Bootstrap Spinners, полностью созданных с использованием HTML, CSS и без использования JavaScript.

О спиннерах

“Спиннеры” Bootstrap можно использовать для отображения состояния загрузки в ваших проектах. Они создаются только с использованием HTML и CSS, что означает, что вам не нужен JavaScript для их создания. Однако вам понадобится некоторый пользовательский JavaScript для переключения их видимости. Их внешний вид, выравнивание и размер можно легко настроить с помощью наших замечательных служебных классов.

В целях обеспечения доступности каждый загрузчик здесь включает в себя role="status" и вложенный <span class="visually-hidden">Loading...</span>.

Эффект анимации этого компонента зависит от медиа-запроса prefers-reduced-motion. Смотрите раздел уменьшенное движение в документации по доступности.

Border spinner

Используйте border spinner для облегченного индикатора загрузки.

<div class="spinner-border" role="status">
  <span class="visually-hidden">Загрузка...</span>
</div>
Результат:
Загрузка...

Цвета

Счетчик границ использует currentColor для своего border-color, что означает, что вы можете настроить цвет с помощью утилит для определения цвета текста. Вы можете использовать любую из наших утилит для определения цвета текста на стандартном спиннере.

<div class="spinner-border text-primary" role="status">
  <span class="visually-hidden">Загрузка...</span>
</div>
<div class="spinner-border text-secondary" role="status">
  <span class="visually-hidden">Загрузка...</span>
</div>
<div class="spinner-border text-success" role="status">
  <span class="visually-hidden">Загрузка...</span>
</div>
<div class="spinner-border text-danger" role="status">
  <span class="visually-hidden">Загрузка...</span>
</div>
<div class="spinner-border text-warning" role="status">
  <span class="visually-hidden">Загрузка...</span>
</div>
<div class="spinner-border text-info" role="status">
  <span class="visually-hidden">Загрузка...</span>
</div>
<div class="spinner-border text-light" role="status">
  <span class="visually-hidden">Загрузка...</span>
</div>
<div class="spinner-border text-dark" role="status">
  <span class="visually-hidden">Загрузка...</span>
</div>
Результат:
Загрузка...
Загрузка...
Загрузка...
Загрузка...
Загрузка...
Загрузка...
Загрузка...
Загрузка...
Почему бы не использовать утилиты border-color? Каждый счетчик границ задает transparent границу по крайней мере для одной стороны, поэтому .border-{color} утилиты переопределят это.

Растущий спиннер

Если вам не нравится border spinner, переключитесь на grow spinner. Хотя технически он не вращается, он постоянно растет!

<div class="spinner-grow" role="status">
  <span class="visually-hidden">Загрузка...</span>
</div>
Результат:
Загрузка...

Еще раз, этот блесна встроен в currentColor, поэтому вы можете легко изменить его внешний вид с помощью утилит для изменения цвета текста. Здесь он выделен синим цветом вместе с поддерживаемыми вариантами.

<div class="spinner-grow text-primary" role="status">
  <span class="visually-hidden">Загрузка...</span>
</div>
<div class="spinner-grow text-secondary" role="status">
  <span class="visually-hidden">Loading...</span>
</div>
<div class="spinner-grow text-success" role="status">
  <span class="visually-hidden">Загрузка...</span>
</div>
<div class="spinner-grow text-danger" role="status">
  <span class="visually-hidden">Loading...</span>
</div>
<div class="spinner-grow text-warning" role="status">
  <span class="visually-hidden">Загрузка...</span>
</div>
<div class="spinner-grow text-info" role="status">
  <span class="visually-hidden">Loading...</span>
</div>
<div class="spinner-grow text-light" role="status">
  <span class="visually-hidden">Загрузка...</span>
</div>
<div class="spinner-grow text-dark" role="status">
  <span class="visually-hidden">Loading...</span>
</div>
Результат:
Загрузка...
Loading...
Загрузка...
Loading...
Загрузка...
Loading...
Загрузка...
Loading...

Выравнивание

спиннеры в Bootstrap создаются с помощью rem, currentColor и display: inline-flex. Это означает, что их можно легко изменять в размерах, перекрашивать и быстро выравнивать.

Margin

Используйте утилиты для создания полей,подобные .m-5, для упрощения интервалов.

<div class="spinner-border m-5" role="status">
  <span class="visually-hidden">Loading...</span>
</div>
Результат:
Loading...

Размещение

Используйте утилиты flexbox, утилиты float или утилиты для выравнивания текста, чтобы разместить спиннеры именно там, где они вам нужны в любой ситуации.

Flex

<div class="d-flex justify-content-center">
  <div class="spinner-border" role="status">
    <span class="visually-hidden">Loading...</span>
  </div>
</div>
Результат:
Loading...
<div class="d-flex align-items-center">
  <strong role="status">Loading...</strong>
  <div class="spinner-border ms-auto" aria-hidden="true"></div>
</div>
Результат:
Loading...

Floats

<div class="clearfix">
  <div class="spinner-border float-end" role="status">
    <span class="visually-hidden">Loading...</span>
  </div>
</div>
Результат:
Loading...

Выравнивание текста

<div class="text-center">
  <div class="spinner-border" role="status">
    <span class="visually-hidden">Loading...</span>
  </div>
</div>
Результат:
Loading...

Размер

Добавьте .spinner-border-sm и .spinner-grow-sm, чтобы сделать блесну меньшего размера, которую можно быстро использовать в составе других компонентов.

<div class="spinner-border spinner-border-sm" role="status">
  <span class="visually-hidden">Loading...</span>
</div>
<div class="spinner-grow spinner-grow-sm" role="status">
  <span class="visually-hidden">Loading...</span>
</div>
Результат:
Loading...
Loading...

Или используйте пользовательский CSS или встроенные стили для изменения размеров по мере необходимости.

<div class="spinner-border" style="width: 3rem; height: 3rem;" role="status">
  <span class="visually-hidden">Загрузка...</span>
</div>
<div class="spinner-grow" style="width: 3rem; height: 3rem;" role="status">
  <span class="visually-hidden">Загрузка...</span>
</div>
Результат:
Загрузка...
Загрузка...

Кнопки

Используйте спиннеры внутри кнопок, чтобы указать, что действие в данный момент выполняется. Вы также можете поменять местами текст элемента спиннеры и использовать текст кнопки по мере необходимости.

<button class="btn btn-primary" type="button" disabled>
  <span class="spinner-border spinner-border-sm" aria-hidden="true"></span>
  <span class="visually-hidden" role="status">Загрузка...</span>
</button>
<button class="btn btn-primary" type="button" disabled>
  <span class="spinner-border spinner-border-sm" aria-hidden="true"></span>
  <span role="status">Загрузка...</span>
</button>
Результат:
<button class="btn btn-primary" type="button" disabled>
  <span class="spinner-grow spinner-grow-sm" aria-hidden="true"></span>
  <span class="visually-hidden" role="status">Загрузка...</span>
</button>
<button class="btn btn-primary" type="button" disabled>
  <span class="spinner-grow spinner-grow-sm" aria-hidden="true"></span>
  <span role="status">Загрузка...</span>
</button>
Результат:

CSS

Переменные

Добавлено в версии 5.2.0

В рамках развивающегося подхода Bootstrap к CSS-переменным, spinners теперь используют локальные CSS-переменные в .spinner-border и .spinner-grow для расширенной настройки в режиме реального времени. Значения для переменных CSS устанавливаются через Sass, поэтому настройка Sass по-прежнему поддерживается.

Граничные переменные снипперов:

scss/_spinners.scss

--#{$prefix}spinner-width: #{$spinner-width};
--#{$prefix}spinner-height: #{$spinner-height};
--#{$prefix}spinner-vertical-align: #{$spinner-vertical-align};
--#{$prefix}spinner-border-width: #{$spinner-border-width};
--#{$prefix}spinner-animation-speed: #{$spinner-animation-speed};
--#{$prefix}spinner-animation-name: spinner-border;

Растущие переменные спиннеры:

scss/_spinners.scss

--#{$prefix}spinner-width: #{$spinner-width};
--#{$prefix}spinner-height: #{$spinner-height};
--#{$prefix}spinner-vertical-align: #{$spinner-vertical-align};
--#{$prefix}spinner-animation-speed: #{$spinner-animation-speed};
--#{$prefix}spinner-animation-name: spinner-grow;

Для обоих блесен используются классы-модификаторы small spinner для обновления значений этих переменных CSS по мере необходимости. Например, .spinner-border-sm класс выполняет следующее:

scss/_spinners.scss

--#{$prefix}spinner-width: #{$spinner-width-sm};
--#{$prefix}spinner-height: #{$spinner-height-sm};
--#{$prefix}spinner-border-width: #{$spinner-border-width-sm};

Переменные Sass

scss/_variables.scss

$spinner-width:           2rem;
$spinner-height:          $spinner-width;
$spinner-vertical-align:  -.125em;
$spinner-border-width:    .25em;
$spinner-animation-speed: .75s;
$spinner-width-sm:        1rem;
$spinner-height-sm:       $spinner-width-sm;
$spinner-border-width-sm: .2em;

Ключевые кадры

Используется для создания CSS-анимации для наших спиннеров. Включено в scss/_spinners.scss.

scss/_spinners.scss

@keyframes spinner-border {
  to { transform: rotate(360deg) #{"/* rtl:ignore */"}; }
}

scss/_spinners.scss

@keyframes spinner-grow {
  0% {
    transform: scale(0);
  }
  50% {
    opacity: 1;
    transform: none;
  }
}