Кнопки
Используйте настраиваемые стили кнопок Bootstrap для взаимодействия с формами, диалоговыми окнами, т.п. Имеется поддержка нескольких размеров, состояний и т.д.
Примеры
Bootstrap имеет некоторые предопределенные стили кнопок, каждый из которых имеет свою семантическую цель, и имеет дополнительные параметры для большего контроля и гибкости.
<buttontype="button"class="btn btn-primary">Primary</button><buttontype="button"class="btn btn-secondary">Secondary</button><buttontype="button"class="btn btn-success">Success</button><buttontype="button"class="btn btn-danger">Danger</button><buttontype="button"class="btn btn-warning">Warning</button><buttontype="button"class="btn btn-info">Info</button><buttontype="button"class="btn btn-light">Light</button><buttontype="button"class="btn btn-dark">Dark</button><buttontype="button"class="btn btn-link">Link</button>Использование вспомогательных технологий
Использование цвета как дополнительного инструмента информативности доступно только в визуальной сфере, что ограничивает пользователей вспомогательных технологий, например, программ для чтения текста с экрана. Удостоверьтесь, что информация обозначенная цветом, также доступна и из самого контента (например, видимый текст) или содержится в альтернативных средствах – таких как дополнительный скрытый в классе .visually-hidden текст.
Отключение переноса текста
Если вы не хотите переносить текст кнопки, вы можете добавить к ней класс .text-nowrap. В Sass вы можете установить $btn-white-space: nowrap чтобы отключить перенос текста для каждой кнопки.
Тэг «кнопка»
Классы .btn созданы для использования с элементом <button>. Однако их также можно использовать внутри <a> или <input> (хотя из-за этого некоторые браузеры могут рендерить это немного иначе).
При использовании классов .btn в элементах <a>, которые в данном случае используются не как линк, ведущий на новые страницы или как якорь, а как триггер внутристраничной функциональности (такой как сворачивание содержимого), необходимо задать этим <a> атрибут role="button" для правильного поведения в случае применения вспомогательных технологий таких как «экранная читалка».
<aclass="btn btn-primary"href="#"role="button">Ссылка</a><buttonclass="btn btn-primary"type="submit">Кнопка</button><inputclass="btn btn-primary"type="button"value="Поле ввода"><inputclass="btn btn-primary"type="submit"value="Поле Отправить"><inputclass="btn btn-primary"type="reset"value="Поле Сбросить">Контурные кнопки (без фона)
Нужна кнопка, но без «тяжелых» фоновых цветов? Замените дефолтные классы-модификаторы на классы .btn-outline-* для удаления всех фоновых изображений и цветов в любой кнопке.
<buttontype="button"class="btn btn-outline-primary">Primary</button><buttontype="button"class="btn btn-outline-secondary">Secondary</button><buttontype="button"class="btn btn-outline-success">Success</button><buttontype="button"class="btn btn-outline-danger">Danger</button><buttontype="button"class="btn btn-outline-warning">Warning</button><buttontype="button"class="btn btn-outline-info">Info</button><buttontype="button"class="btn btn-outline-light">Light</button><buttontype="button"class="btn btn-outline-dark">Dark</button>Размеры
Хотите кнопки большего или меньшего размера? Добавьте .btn-lg или .btn-sm для дополнительных размеров.
<buttontype="button"class="btn btn-primary btn-lg">Большая кнопка</button><buttontype="button"class="btn btn-secondary btn-lg">Большая кнопка</button><buttontype="button"class="btn btn-primary btn-sm">Маленькая кнопка</button><buttontype="button"class="btn btn-secondary btn-sm">Маленькая кнопка</button>Вы даже можете изменить свой собственный размер с помощью переменных CSS:
<buttontype="button"class="btn btn-primary"style="--bs-btn-padding-y: .25rem; --bs-btn-padding-x: .5rem; --bs-btn-font-size: .75rem;"> Пользовательская кнопка
</button>Отключенное состояние
Чтобы кнопки выглядели неактивными, добавьте логический атрибут disabled к любому элементу <button>. Отключенные кнопки имеют значение pointer-events: none что предотвращает срабатывание состояний наведения и активного состояния.
<buttontype="button"class="btn btn-primary"disabled>Основная кнопка</button><buttontype="button"class="btn btn-secondary"disabled>Кнопка</button><buttontype="button"class="btn btn-outline-primary"disabled>Основная кнопка</button><buttontype="button"class="btn btn-outline-secondary"disabled>Кнопка</button>Отключенные кнопки, использующие элемент <a>, ведут себя немного иначе:
<a>не поддерживает атрибутdisabled, поэтому вы должны добавить класс.disabled, чтобы он визуально выглядел отключенным.- Для использования в будущем включены некоторые удобные стили для отключения всех событий
pointer-eventsна кнопках привязки. - Отключенные кнопки с использованием
<a>должны включать атрибутaria-disabled="true", чтобы указать состояние элемента для вспомогательных технологий. - Отключенные кнопки с использованием
<a>не должны включать атрибутhref.
<aclass="btn btn-primary disabled"role="button"aria-disabled="true">Первичная ссылка</a><aclass="btn btn-secondary disabled"role="button"aria-disabled="true">Ссылка</a>Предупреждение о функциональности ссылок
Чтобы охватить случаи, когда вам нужно сохранить атрибут href в отключенной ссылке, класс .disabled использует pointer-events: none, чтобы попытаться отключить функциональность ссылки для <a>. Обратите внимание, что это свойство CSS еще не стандартизировано для HTML, но все современные браузеры его поддерживают. Кроме того, даже в браузерах, которые поддерживают pointer-events: none, навигация с помощью клавиатуры остается неизменной, а это означает, что зрячие пользователи клавиатуры и пользователи вспомогательных технологий по-прежнему смогут активировать эти ссылки. Чтобы быть в безопасности, в дополнение к aria-disabled="true" также включите атрибут tabindex="-1" в эти ссылки, чтобы они не получали фокус клавиатуры, и используйте собственный JavaScript, чтобы полностью отключить их функциональность.
<ahref="#"class="btn btn-primary disabled"tabindex="-1"role="button"aria-disabled="true">Первичная ссылка</a><ahref="#"class="btn btn-secondary disabled"tabindex="-1"role="button"aria-disabled="true">Ссылка</a>Блочные кнопки
Создавайте гибкие стопки полноразмерных «кнопок блока», как в Bootstrap 4, с помощью наших утилит display и разрывов. Используя утилиты вместо классов, специфичных для кнопок, мы получаем гораздо больший контроль над интервалами, выравниванием и адаптивным поведением.
<divclass="d-grid gap-2"><buttonclass="btn btn-primary"type="button">Button</button><buttonclass="btn btn-primary"type="button">Button</button></div>Здесь мы создаем адаптивный вариант, начиная с вертикально расположенных кнопок до точки останова md, где .d-md-block заменяет класс .d-grid, тем самым сводя на нет параметры gap-2. Измените размер окна браузера, чтобы увидеть изменения.
<divclass="d-grid gap-2 d-md-block"><buttonclass="btn btn-primary"type="button">Button</button><buttonclass="btn btn-primary"type="button">Button</button></div>Вы можете настроить ширину кнопок блока с помощью классов ширины столбцов сетки. Например, для «кнопки блока» половинной ширины используйте .col-6. Отцентрируйте его также по горизонтали с помощью .mx-auto.
<divclass="d-grid gap-2 col-6 mx-auto"><buttonclass="btn btn-primary"type="button">Button</button><buttonclass="btn btn-primary"type="button">Button</button></div>Дополнительные утилиты можно использовать для регулировки выравнивания кнопок по горизонтали. Здесь мы взяли наш предыдущий адаптивный пример и добавили несколько утилит гибкости и утилит ширины на кнопку, чтобы выровнять кнопки по правому краю, когда они больше не сложены.
<divclass="d-grid gap-2 d-md-flex justify-content-md-end"><buttonclass="btn btn-primary me-md-2"type="button">Button</button><buttonclass="btn btn-primary"type="button">Button</button></div>Плагины кнопок
Контролируйте состояния кнопок или создавайте группы кнопок для компонентов, таких как «тулбары».
Переключение состояний
Добавьте data-bs-toggle="button" для переключения состояния active. Если Вы предварительно переключаете кнопку, Вы должны вручную добавить класс .activeиaria-pressed="true" чтобы гарантировать, что это будет правильно передано вспомогательным технологиям.
<buttontype="button"class="btn btn-primary"data-bs-toggle="button">Кнопка-переключатель</button><buttontype="button"class="btn btn-primary active"data-bs-toggle="button"aria-pressed="true">Активная кнопка-переключатель</button><buttontype="button"class="btn btn-primary"disableddata-bs-toggle="button">Отключенная кнопка-переключатель</button><ahref="#"class="btn btn-primary"role="button"data-bs-toggle="button">Ссылка-переключатель</a><ahref="#"class="btn btn-primary active"role="button"data-bs-toggle="button"aria-pressed="true">Активная ссылка-переключатель</a><aclass="btn btn-primary disabled"aria-disabled="true"role="button"data-bs-toggle="button">Отключенная ссылка-переключатель</a>Методы
Вы можете создать экземпляр кнопки с помощью конструктора кнопки, например:
constbsButton=newbootstrap.Button('#myButton')| Метод | Описание |
|---|---|
dispose | Уничтожает кнопку элемента. (Удаляет сохраненные данные в элементе DOM) |
getInstance | Статический метод, который позволяет вам получить экземпляр кнопки, связанный с элементом DOM, вы можете использовать его следующим образом: bootstrap.Button.getInstance(element) |
getOrCreateInstance | Статический метод, который возвращает экземпляр кнопки, связанный с элементом DOM, или создает новый, если он не был инициализирован. Вы можете использовать его следующим образом: bootstrap.Button.getOrCreateInstance(element) |
toggle | Переключает состояние нажатия. Дает кнопке вид, что она была активирована. |
Например, чтобы переключить все кнопки
document.querySelectorAll('.btn').forEach(buttonElement=>{constbutton=bootstrap.Button.getOrCreateInstance(buttonElement)button.toggle()})CSS
Переменные
Добавлено в версии 5.2.0В рамках развивающегося подхода Bootstrap к переменным CSS кнопки теперь используют локальные переменные CSS в .btn для расширенной настройки в реальном времени. Значения переменных CSS задаются через Sass, поэтому настройка Sass по-прежнему поддерживается.
--#{$prefix}btn-padding-x:#{$btn-padding-x};--#{$prefix}btn-padding-y:#{$btn-padding-y};--#{$prefix}btn-font-family:#{$btn-font-family};@include rfs($btn-font-size,--#{$prefix}btn-font-size);--#{$prefix}btn-font-weight:#{$btn-font-weight};--#{$prefix}btn-line-height:#{$btn-line-height};--#{$prefix}btn-color:#{$body-color};--#{$prefix}btn-bg:transparent;--#{$prefix}btn-border-width:#{$btn-border-width};--#{$prefix}btn-border-color:transparent;--#{$prefix}btn-border-radius:#{$btn-border-radius};--#{$prefix}btn-hover-border-color:transparent;--#{$prefix}btn-box-shadow:#{$btn-box-shadow};--#{$prefix}btn-disabled-opacity:#{$btn-disabled-opacity};--#{$prefix}btn-focus-box-shadow:000#{$btn-focus-width}rgba(var(--#{$prefix}btn-focus-shadow-rgb),.5);Каждый класс модификатора .btn-* обновляет соответствующие переменные CSS, чтобы свести к минимуму дополнительные правила CSS с нашими миксинами button-variant(), button-outline-variant() и button-size().
Вот пример создания пользовательского класса модификатора .btn-*, как мы делаем для кнопок, уникальных для наших документов, путем переназначения переменных CSS Bootstrap с помощью смеси наших собственных переменных CSS и Sass.
.btn-bd-primary{--bs-btn-font-weight:600;--bs-btn-color:var(--bs-white);--bs-btn-bg:var(--bd-violet);--bs-btn-border-color:var(--bd-violet);--bs-btn-border-radius:.5rem;--bs-btn-hover-color:var(--bs-white);--bs-btn-hover-bg:#{shade-color($bd-violet,10%)};--bs-btn-hover-border-color:#{shade-color($bd-violet,10%)};--bs-btn-focus-shadow-rgb:var(--bd-violet-rgb);--bs-btn-active-color:var(--bs-btn-hover-color);--bs-btn-active-bg:#{shade-color($bd-violet,20%)};--bs-btn-active-border-color:#{shade-color($bd-violet,20%)};}Переменные Sass
$btn-padding-y:$input-btn-padding-y;$btn-padding-x:$input-btn-padding-x;$btn-font-family:$input-btn-font-family;$btn-font-size:$input-btn-font-size;$btn-line-height:$input-btn-line-height;$btn-white-space:null;// Set to `nowrap` to prevent text wrapping
$btn-padding-y-sm:$input-btn-padding-y-sm;$btn-padding-x-sm:$input-btn-padding-x-sm;$btn-font-size-sm:$input-btn-font-size-sm;$btn-padding-y-lg:$input-btn-padding-y-lg;$btn-padding-x-lg:$input-btn-padding-x-lg;$btn-font-size-lg:$input-btn-font-size-lg;$btn-border-width:$input-btn-border-width;$btn-font-weight:$font-weight-normal;$btn-box-shadow:inset01px0rgba($white,.15),01px1pxrgba($black,.075);$btn-focus-width:$input-btn-focus-width;$btn-focus-box-shadow:$input-btn-focus-box-shadow;$btn-disabled-opacity:.65;$btn-active-box-shadow:inset03px5pxrgba($black,.125);$btn-link-color:var(--#{$prefix}link-color);$btn-link-hover-color:var(--#{$prefix}link-hover-color);$btn-link-disabled-color:$gray-600;// Allows for customizing button radius independently from global border radius
$btn-border-radius:$border-radius;$btn-border-radius-sm:$border-radius-sm;$btn-border-radius-lg:$border-radius-lg;$btn-transition:color.15sease-in-out,background-color.15sease-in-out,border-color.15sease-in-out,box-shadow.15sease-in-out;$btn-hover-bg-shade-amount:15%;$btn-hover-bg-tint-amount:15%;$btn-hover-border-shade-amount:20%;$btn-hover-border-tint-amount:10%;$btn-active-bg-shade-amount:20%;$btn-active-bg-tint-amount:20%;$btn-active-border-shade-amount:25%;$btn-active-border-tint-amount:10%;Миксины Sass
Есть три миксина для кнопок: миксины для кнопок и вариантов контура кнопки (оба основаны на $theme-colors), плюс миксин размера кнопки.
@mixin button-variant($background,$border,$color:color-contrast($background),$hover-background:if($color==$color-contrast-light,shade-color($background,$btn-hover-bg-shade-amount),tint-color($background,$btn-hover-bg-tint-amount)),$hover-border:if($color==$color-contrast-light,shade-color($border,$btn-hover-border-shade-amount),tint-color($border,$btn-hover-border-tint-amount)),$hover-color:color-contrast($hover-background),$active-background:if($color==$color-contrast-light,shade-color($background,$btn-active-bg-shade-amount),tint-color($background,$btn-active-bg-tint-amount)),$active-border:if($color==$color-contrast-light,shade-color($border,$btn-active-border-shade-amount),tint-color($border,$btn-active-border-tint-amount)),$active-color:color-contrast($active-background),$disabled-background:$background,$disabled-border:$border,$disabled-color:color-contrast($disabled-background)){--#{$prefix}btn-color:#{$color};--#{$prefix}btn-bg:#{$background};--#{$prefix}btn-border-color:#{$border};--#{$prefix}btn-hover-color:#{$hover-color};--#{$prefix}btn-hover-bg:#{$hover-background};--#{$prefix}btn-hover-border-color:#{$hover-border};--#{$prefix}btn-focus-shadow-rgb:#{to-rgb(mix($color,$border,15%))};--#{$prefix}btn-active-color:#{$active-color};--#{$prefix}btn-active-bg:#{$active-background};--#{$prefix}btn-active-border-color:#{$active-border};--#{$prefix}btn-active-shadow:#{$btn-active-box-shadow};--#{$prefix}btn-disabled-color:#{$disabled-color};--#{$prefix}btn-disabled-bg:#{$disabled-background};--#{$prefix}btn-disabled-border-color:#{$disabled-border};}@mixin button-outline-variant($color,$color-hover:color-contrast($color),$active-background:$color,$active-border:$color,$active-color:color-contrast($active-background)){--#{$prefix}btn-color:#{$color};--#{$prefix}btn-border-color:#{$color};--#{$prefix}btn-hover-color:#{$color-hover};--#{$prefix}btn-hover-bg:#{$active-background};--#{$prefix}btn-hover-border-color:#{$active-border};--#{$prefix}btn-focus-shadow-rgb:#{to-rgb($color)};--#{$prefix}btn-active-color:#{$active-color};--#{$prefix}btn-active-bg:#{$active-background};--#{$prefix}btn-active-border-color:#{$active-border};--#{$prefix}btn-active-shadow:#{$btn-active-box-shadow};--#{$prefix}btn-disabled-color:#{$color};--#{$prefix}btn-disabled-bg:transparent;--#{$prefix}btn-disabled-border-color:#{$color};--#{$prefix}gradient:none;}@mixin button-size($padding-y,$padding-x,$font-size,$border-radius){--#{$prefix}btn-padding-y:#{$padding-y};--#{$prefix}btn-padding-x:#{$padding-x};@include rfs($font-size,--#{$prefix}btn-font-size);--#{$prefix}btn-border-radius:#{$border-radius};}Циклы Sass
Варианты кнопок (для обычных и контурных кнопок) используют соответствующие миксины с нашей картой $theme-colors для генерации классов модификаторов в scss/_buttons.scss.
@each$color,$valuein$theme-colors{.btn-#{$color}{@if$color=="light"{@include button-variant($value,$value,$hover-background:shade-color($value,$btn-hover-bg-shade-amount),$hover-border:shade-color($value,$btn-hover-border-shade-amount),$active-background:shade-color($value,$btn-active-bg-shade-amount),$active-border:shade-color($value,$btn-active-border-shade-amount));}@else if$color=="dark"{@include button-variant($value,$value,$hover-background:tint-color($value,$btn-hover-bg-tint-amount),$hover-border:tint-color($value,$btn-hover-border-tint-amount),$active-background:tint-color($value,$btn-active-bg-tint-amount),$active-border:tint-color($value,$btn-active-border-tint-amount));}@else{@include button-variant($value,$value);}}}@each$color,$valuein$theme-colors{.btn-outline-#{$color}{@include button-outline-variant($value);}}