Спиннеры
Показывайте состояние загрузки компонента или страницы с помощью спиннеров Bootstrap, созданных полностью на HTML, CSS и без JavaScript.
О спиннерах
"Спиннеры" Bootstrap можно использовать для отображения состояния загрузки в ваших проектах. Они созданы только с помощью HTML и CSS, что означает, что вам не нужен JavaScript для их создания. Однако вам понадобится немного пользовательского JavaScript для переключения их видимости. Их внешний вид, выравнивание и размер можно легко настроить с помощью наших замечательных утилитарных классов.
Для целей доступности каждый загрузчик здесь включает role="status"
и вложенный <span class="visually-hidden">Loading...</span>
.
Анимационный эффект этого компонента зависит от медиа-запроса prefers-reduced-motion
. См. раздел о сокращенном движении в нашей документации по доступности.
Спиннер с рамкой
Используйте спиннеры с рамкой для легкого индикатора загрузки.
<div class="spinner-border" role="status">
<span class="visually-hidden">Loading...</span>
</div>
Цвета
Спиннер с рамкой использует currentColor
для своего border-color
, что означает, что вы можете настроить цвет с помощью утилит цвета текста. Вы можете использовать любые из наших утилит цвета текста на стандартном спиннере.
<div class="spinner-border text-primary" role="status">
<span class="visually-hidden">Loading...</span>
</div>
<div class="spinner-border text-secondary" role="status">
<span class="visually-hidden">Loading...</span>
</div>
<div class="spinner-border text-success" role="status">
<span class="visually-hidden">Loading...</span>
</div>
<div class="spinner-border text-danger" role="status">
<span class="visually-hidden">Loading...</span>
</div>
<div class="spinner-border text-warning" role="status">
<span class="visually-hidden">Loading...</span>
</div>
<div class="spinner-border text-info" role="status">
<span class="visually-hidden">Loading...</span>
</div>
<div class="spinner-border text-light" role="status">
<span class="visually-hidden">Loading...</span>
</div>
<div class="spinner-border text-dark" role="status">
<span class="visually-hidden">Loading...</span>
</div>
Почему не использовать утилиты border-color
? Каждый спиннер с рамкой указывает transparent
границу хотя бы для одной стороны, поэтому утилиты .border-{color}
переопределят это.
Растущий спиннер
Если вам не нравится спиннер с рамкой, переключитесь на растущий спиннер. Хотя технически он не вращается, он многократно увеличивается!
<div class="spinner-grow" role="status">
<span class="visually-hidden">Loading...</span>
</div>
Опять же, этот спиннер построен с currentColor
, поэтому вы можете легко изменить его внешний вид с помощью утилит цвета текста. Вот он в синем цвете вместе с поддерживаемыми вариантами.
<div class="spinner-grow text-primary" role="status">
<span class="visually-hidden">Loading...</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">Loading...</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">Loading...</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">Loading...</span>
</div>
<div class="spinner-grow text-dark" role="status">
<span class="visually-hidden">Loading...</span>
</div>
Выравнивание
Спиннеры в Bootstrap построены с rem
ами, currentColor
и display: inline-flex
. Это означает, что их можно легко изменить в размере, перекрасить и быстро выровнять.
Отступы
Используйте утилиты отступов, такие как .m-5
, для удобного интервала.
<div class="spinner-border m-5" role="status">
<span class="visually-hidden">Loading...</span>
</div>
Размещение
Используйте утилиты flexbox, утилиты float или утилиты выравнивания текста, чтобы разместить спиннеры именно там, где они вам нужны в любой ситуации.
Флексбокс (Flex)
<div class="d-flex justify-content-center">
<div class="spinner-border" role="status">
<span class="visually-hidden">Loading...</span>
</div>
</div>
<div class="d-flex align-items-center">
<strong role="status">Loading...</strong>
<div class="spinner-border ms-auto" aria-hidden="true"></div>
</div>
Обтекание (Float)
<div class="clearfix">
<div class="spinner-border float-end" role="status">
<span class="visually-hidden">Loading...</span>
</div>
</div>
Выравнивание текста
<div class="text-center">
<div class="spinner-border" role="status">
<span class="visually-hidden">Loading...</span>
</div>
</div>
Размер
Добавьте .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>
Или используйте пользовательский CSS или встроенные стили, чтобы изменить размеры по мере необходимости.
<div class="spinner-border" style="width: 3rem; height: 3rem;" role="status">
<span class="visually-hidden">Loading...</span>
</div>
<div class="spinner-grow" style="width: 3rem; height: 3rem;" role="status">
<span class="visually-hidden">Loading...</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">Loading...</span>
</button>
<button class="btn btn-primary" type="button" disabled>
<span class="spinner-border spinner-border-sm" aria-hidden="true"></span>
<span role="status">Loading...</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">Loading...</span>
</button>
<button class="btn btn-primary" type="button" disabled>
<span class="spinner-grow spinner-grow-sm" aria-hidden="true"></span>
<span role="status">Loading...</span>
</button>
CSS
Переменные
Добавлено в v5.2.0В рамках развивающегося подхода Bootstrap к CSS переменным, спиннеры теперь используют локальные CSS переменные на .spinner-border
и .spinner-grow
для расширенной настройки в реальном времени. Значения для CSS переменных устанавливаются через Sass, поэтому настройка Sass также все еще поддерживается.
Переменные спиннера с рамкой:
--#{$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;
Переменные растущего спиннера:
--#{$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;
Для обоих спиннеров используются классы-модификаторы маленького спиннера для обновления значений этих CSS переменных по мере необходимости. Например, класс .spinner-border-sm
делает следующее:
--#{$prefix}spinner-width: #{$spinner-width-sm};
--#{$prefix}spinner-height: #{$spinner-height-sm};
--#{$prefix}spinner-border-width: #{$spinner-border-width-sm};
Sass переменные
$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
.
@keyframes spinner-border {
to { transform: rotate(360deg) #{"/* rtl:ignore */"}; }
}
@keyframes spinner-grow {
0% {
transform: scale(0);
}
50% {
opacity: 1;
transform: none;
}
}