1111
Перейти к основному содержаниюПерейти к навигации по документам

Используйте настраиваемые стили кнопок Bootstrap для взаимодействия с формами, диалоговыми окнами, т.п. Имеется поддержка нескольких размеров, состояний и т.д.

Базовый класс

Bootstrap имеет базовый класс .btn, который устанавливает основные стили, такие как отступы и выравнивание содержимого. По умолчанию элементы управления .btn имеют прозрачную рамку и цвет фона и не имеют каких-либо явных стилей фокуса и наведения.

html
<buttontype="button"class="btn">Базовый класс</button>

Класс .btn предназначен для использования в сочетании с нашими вариантами кнопок или в качестве основы для ваших собственных стилей.

Если вы используете класс .btn сам по себе, не забудьте, по крайней мере, определить некоторые явные стили :focus и/или :focus-visible.

Варианты

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

html
<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> (хотя некоторые браузеры могут применять несколько иной рендеринг).

При использовании классов кнопок в элементах <a>, которые используются для запуска функциональности на странице (например, сворачивания содержимого), вместо того, чтобы ссылаться на новые страницы или разделы на текущей странице, этим ссылкам следует присвоить кнопку role="button", чтобы должным образом донести свою цель до вспомогательных технологий, таких как программы чтения с экрана.

Ссылка
html
<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-*, чтобы удалить все фоновые изображения и цвета на любой кнопке.

html
<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 для дополнительных размеров.

html
<buttontype="button"class="btn btn-primary btn-lg">Большая кнопка</button><buttontype="button"class="btn btn-secondary btn-lg">Большая кнопка</button>
html
<buttontype="button"class="btn btn-primary btn-sm">Маленькая кнопка</button><buttontype="button"class="btn btn-secondary btn-sm">Маленькая кнопка</button>

Вы даже можете изменить свой собственный размер с помощью переменных CSS:

html
<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, что предотвращает срабатывание состояний наведения и активного состояния.

html
<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.
html
<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, чтобы полностью отключить их функциональность.

html
<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 и gap. Используя утилиты вместо классов, специфичных для кнопок, мы получаем гораздо больший контроль над интервалом, выравниванием и поведением.

html
<divclass="d-grid gap-2"><buttonclass="btn btn-primary"type="button">Кнопка</button><buttonclass="btn btn-primary"type="button">Кнопка</button></div>

Здесь мы создаем адаптивный вариант, начиная с вертикально расположенных кнопок до контрольной точки md, где .d-md-block заменяет класс .d-grid, тем самым сводя на нет утилиту gap-2. Измените размер браузера, чтобы увидеть, как они меняются.

html
<divclass="d-grid gap-2 d-md-block"><buttonclass="btn btn-primary"type="button">Кнопка</button><buttonclass="btn btn-primary"type="button">Кнопка</button></div>

Вы можете настроить ширину кнопок блока с помощью классов ширины столбцов сетки. Например, для «блочной кнопки» половинной ширины используйте .col-6. Отцентрируйте его также по горизонтали с помощью .mx-auto.

html
<divclass="d-grid gap-2 col-6 mx-auto"><buttonclass="btn btn-primary"type="button">Кнопка</button><buttonclass="btn btn-primary"type="button">Кнопка</button></div>

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

html
<divclass="d-grid gap-2 d-md-flex justify-content-md-end"><buttonclass="btn btn-primary me-md-2"type="button">Кнопка</button><buttonclass="btn btn-primary"type="button">Кнопка</button></div>

Плагины кнопок

Плагин кнопок позволяет создавать простые кнопки включения/выключения.

Визуально эти кнопки переключения идентичны кнопкам переключения флажков. Однако вспомогательные технологии передают их по-другому: переключатели флажков будут объявлены программами чтения с экрана как «отмечено»/«не отмечено» (поскольку, несмотря на их внешний вид, они по сути остаются флажками), тогда как эти переключатели будут объявлены как “кнопка”/“кнопка нажата”. Выбор между этими двумя подходами будет зависеть от типа создаваемого Вами переключателя и от того, будет ли этот переключатель иметь смысл для пользователей, когда он объявлен как флажок или как фактическая кнопка.

Переключение состояния

Добавьте data-bs-toggle="button" для переключения состояния active. Если Вы предварительно переключаете кнопку, Вы должны вручную добавить класс .activeиaria-pressed="true" чтобы гарантировать, что это будет правильно передано вспомогательным технологиям.

html
<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>
html
<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')
МетодОписание
disposeDestroys an element’s button. (Removes stored data on the DOM element).
getInstanceStatic method which allows you to get the button instance associated to a DOM element, you can use it like this: bootstrap.Button.getInstance(element).
getOrCreateInstanceStatic method which returns a button instance associated to a DOM element or create a new one in case it wasn’t initialized. You can use it like this: bootstrap.Button.getOrCreateInstance(element).
toggleToggles push state. Gives the button the appearance that it has been activated.

Например, чтобы переключить все кнопки

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:#{$btn-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-bg);--bs-btn-border-color:var(--bd-violet-bg);--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-color:var(--#{$prefix}body-color);$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;$btn-link-focus-shadow-rgb:to-rgb(mix(color-contrast($link-color),$link-color,15%));// Allows for customizing button radius independently from global border radius
$btn-border-radius:var(--#{$prefix}border-radius);$btn-border-radius-sm:var(--#{$prefix}border-radius-sm);$btn-border-radius-lg:var(--#{$prefix}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);}}