Формы
Примеры и рекомендации по использованию стилей управления формой, параметров макета и пользовательских компонентов для создания широкого спектра форм.
Обзор
Формы в Bootstrap по сути являются просто расширением наших Перезагруженных стилей форм с добавлением классов. Используйте эти классы для более точной настройки отображения и лучшей отрисовки на разных браузерах и устройствах.
Удостоверьтесь, что используете правильный атрибут type
во всех формах ввода (т.е., email
для почты и number
для цифровой информации), это даст вам преимущества в виде новейших инструментов (таких как проверка email, выборка чисел и т.д.) контроля данных ввода.
Вот демонстрация стилей форм Bootstrap. Читайте документацию по требуемым классам, расположению форм и т.д.
Инструменты контроля форм
Текстовые инструменты контроля – такие как <input>
, <select>
и <textarea>
- стилизованы классом .form-control
, который содержит основные стили внешнего вида, активного состояния, размерности и т.д.
Изучите наши обычные формы для дальнейшего понимания стилизации <select>
.
<form>
<div class="form-group">
<label for="exampleFormControlInput1">Email address</label>
<input type="email" class="form-control" id="exampleFormControlInput1" placeholder="name@example.com">
</div>
<div class="form-group">
<label for="exampleFormControlSelect1">Example select</label>
<select class="form-control" id="exampleFormControlSelect1">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
</select>
</div>
<div class="form-group">
<label for="exampleFormControlSelect2">Example multiple select</label>
<select multiple class="form-control" id="exampleFormControlSelect2">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
</select>
</div>
<div class="form-group">
<label for="exampleFormControlTextarea1">Example textarea</label>
<textarea class="form-control" id="exampleFormControlTextarea1" rows="3"></textarea>
</div>
</form>
Для создания формы загрузки файлов замените .form-control
на .form-control-file
.
<form>
<div class="form-group">
<label for="exampleFormControlFile1">Example file input</label>
<input type="file" class="form-control-file" id="exampleFormControlFile1">
</div>
</form>
Размерность
Для создания форм заданной высоты используются классы, такие как .form-control-lg
и .form-control-sm
.
<input class="form-control form-control-lg" type="text" placeholder=".form-control-lg">
<input class="form-control" type="text" placeholder="Default input">
<input class="form-control form-control-sm" type="text" placeholder=".form-control-sm">
<select class="form-control form-control-lg">
<option>Large select</option>
</select>
<select class="form-control">
<option>Default select</option>
</select>
<select class="form-control form-control-sm">
<option>Small select</option>
</select>
«Только чтение»
Добавьте атрибут булеанова типа readonly
в форму ввода для предотвращения возможности изменения значения ввода. Такие типы ввода выглядят светлее (как неактивные формы ввода), но сохраняют стандартный курсор.
<input class="form-control" type="text" placeholder="Readonly input here…" readonly>
Простой текст только для чтения
Если в ваших формах вы хотите стилизовать элементы <input readonly>
как простой текст, используйте класс .form-control-plaintext
для удаления оформления форм по умолчанию и сохранения правильных отступов.
Входы диапазона
Установите горизонтальные прокручиваемые входы диапазона с использованием .form-control-range
.
Чекбоксы и кнопки «радио»
Чекбоксы и «радио», существовавшие по умолчанию, теперь модернизированы единым для обоих классом .form-check
, цель которого – в улучшении их расположения и «поведения» их элементов HTML. Чекбоксы существуют для выбора одного или нескольких параметров из списка, а кнопки «радио» - одного.
Неактивные состояния чекбоксоы и "радио" поддерживаются, но для придания курсору функциональности not-allowed
по наведению на родительский <label>
вам потребуется добавить в .form-check-input
атрибут disabled
. Атрибут disabled будет применять более светлый цвет, чтобы указать состояние ввода.
Использование чекбоксов и "радио" имеет целью поддержать HTML-форму валидации и обеспечить понятные, доступные лейблы. Поэтому наши <input>
и <label>
- имеют одного родителя, в отличие от <input>
, расположенного внутри <label>
. Это немного более подробно, так как вы должны указывать атрибуты id
и for
для связи <input>
и <label>
.
По умолчанию (расположенные по вертикали)
По умолчанию, любое количество идущих один за другим чекбоксов и «радио» кнопок будет располагаться сверху вниз, а класс .form-check
правильно отрегулирует пространство между ними.
<div class="form-check">
<input class="form-check-input" type="checkbox" value="" id="defaultCheck1">
<label class="form-check-label" for="defaultCheck1">
Default checkbox
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" value="" id="defaultCheck2" disabled>
<label class="form-check-label" for="defaultCheck2">
Disabled checkbox
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="exampleRadios" id="exampleRadios1" value="option1" checked>
<label class="form-check-label" for="exampleRadios1">
Default radio
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="exampleRadios" id="exampleRadios2" value="option2">
<label class="form-check-label" for="exampleRadios2">
Second default radio
</label>
</div>
<div class="form-check disabled">
<input class="form-check-input" type="radio" name="exampleRadios" id="exampleRadios3" value="option3" disabled>
<label class="form-check-label" for="exampleRadios3">
Disabled radio
</label>
</div>
Встроенные
Группируйте чекбоксы или «радио» кнопки по одной горизонтальной линии, добавив класс .form-check-inline
в любой элемент класса .form-check
.
<div class="form-check form-check-inline">
<input class="form-check-input" type="checkbox" id="inlineCheckbox1" value="option1">
<label class="form-check-label" for="inlineCheckbox1">1</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="checkbox" id="inlineCheckbox2" value="option2">
<label class="form-check-label" for="inlineCheckbox2">2</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="checkbox" id="inlineCheckbox3" value="option3" disabled>
<label class="form-check-label" for="inlineCheckbox3">3 (disabled)</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio1" value="option1">
<label class="form-check-label" for="inlineRadio1">1</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio2" value="option2">
<label class="form-check-label" for="inlineRadio2">2</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio3" value="option3" disabled>
<label class="form-check-label" for="inlineRadio3">3 (disabled)</label>
</div>
Без ярлыков
Добавьте класс .position-static
в формы ввода, которые находятся внутри элемента класса .form-check
и не имеют какого-либо пояснительного текста. Не забудьте добавить одну из форм «лейбла» для вспомогательных технологий (например, использовав aria-label
).
<div class="form-check">
<input class="form-check-input position-static" type="checkbox" id="blankCheckbox" value="option1" aria-label="...">
</div>
<div class="form-check">
<input class="form-check-input position-static" type="radio" name="blankRadio" id="blankRadio1" value="option1" aria-label="...">
</div>
Расположение
Т.к. Bootstrap применяет display: block
и width: 100%
почти ко всем органам контроля форм, формы по умолчанию будут выстраиваться вертикально. Дополнительные классы можно использовать для создания вариаций расположения каждой отдельной формы.
Группы форм
Класс .form-group
– самый простой путь придания формам некой структуры. Его единственная цель – создание вокруг надписи margin-bottom и включение контроля. В качестве приятного дополнения: поскольку это обычный класс, его можно использовать с <fieldset>
, <div>
или практически любым прочим элементом.
Сетка форм
Используйте их для расположения форм, которые требуют множественных колонок, различной ширины и других дополнительных параметров выравнивания.
<form>
<div class="row">
<div class="col">
<input type="text" class="form-control" placeholder="Имя">
</div>
<div class="col">
<input type="text" class="form-control" placeholder="Фамилия">
</div>
</div>
</form>
Ряд форм
Вы также можете заменить .row
на класс .form-row
, который есть разновидность нашего стандартного ряда сетки, который обладает возможностью «перебить» стандартно установленные расстояния между колонками и делает колонки более компактными.
<form>
<div class="form-row">
<div class="col">
<input type="text" class="form-control" placeholder="Имя">
</div>
<div class="col">
<input type="text" class="form-control" placeholder="Фамилия">
</div>
</div>
</form>
Более сложную разметку можно также создать системой сеток.
Горизонтальные формы
Создайте горизонтальные формы с помощью сеток, добавив класс .row
к группам форм и используя классы .col-*-*
для задания ширины ваших надписей и элементов контроля. Обязательно добавьте класс .col-form-label
также и в ваши <label>
для того, чтобы они приобрели вертикальное центрирование относительно связанных с ними элементов контроля форм.
Временами вам может понадобиться классы марджина или паддинга, чтобы создать классное выравнивание. Например, мы удалили padding-top
в наших вертикально расположенных лейблах ввода "радио", для лучшего выравнивания текста.
Размеры надписей горизонтальных форм
Обязательно используйте классы .col-form-label-sm
или .col-form-label-lg
в своих <label>
для того, чтобы размеры шрифтов названия формы и вспомогательной надписи в пустой форме (т.н. placeholder) ввода совпадали.
<form>
<div class="form-group row">
<label for="colFormLabelSm" class="col-sm-2 col-form-label col-form-label-sm">Email</label>
<div class="col-sm-10">
<input type="email" class="form-control form-control-sm" id="colFormLabelSm" placeholder="col-form-label-sm">
</div>
</div>
<div class="form-group row">
<label for="colFormLabel" class="col-sm-2 col-form-label">Email</label>
<div class="col-sm-10">
<input type="email" class="form-control" id="colFormLabel" placeholder="col-form-label">
</div>
</div>
<div class="form-group row">
<label for="colFormLabelLg" class="col-sm-2 col-form-label col-form-label-lg">Email</label>
<div class="col-sm-10">
<input type="email" class="form-control form-control-lg" id="colFormLabelLg" placeholder="col-form-label-lg">
</div>
</div>
</form>
Размеры колонок
Как показано в предыдущих примерах, наша система сеток позволит вам расположить любое количество классов .col
внутри рядов класса .row
или .form-row
. Такая верстка разделит доступную ширину поровну между колонками. Вы также можете создать субнабор колонок, которые займут либо меньше, либо больше места (как необходимо), в то время как колонки класса .col
равномерно распределятся по оставшейся ширине, к примеру, как классы .col-7
.
<form>
<div class="form-row">
<div class="col-7">
<input type="text" class="form-control" placeholder="City">
</div>
<div class="col">
<input type="text" class="form-control" placeholder="State">
</div>
<div class="col">
<input type="text" class="form-control" placeholder="Zip">
</div>
</div>
</form>
Авторазмеры
В примере ниже для вертикального центрирования содержимого используются обычные инструменты флексбокса, также в нем использован класс .col
вместо .col-auto
- что заставляет колонки занять места лишь столько, сколько необходимо.
<form>
<div class="form-row align-items-center">
<div class="col-auto">
<label class="sr-only" for="inlineFormInput">Name</label>
<input type="text" class="form-control mb-2" id="inlineFormInput" placeholder="Jane Doe">
</div>
<div class="col-auto">
<label class="sr-only" for="inlineFormInputGroup">Имя пользователя</label>
<div class="input-group mb-2">
<div class="input-group-prepend">
<div class="input-group-text">@</div>
</div>
<input type="text" class="form-control" id="inlineFormInputGroup" placeholder="Имя пользователя">
</div>
</div>
<div class="col-auto">
<div class="form-check mb-2">
<input class="form-check-input" type="checkbox" id="autoSizingCheck">
<label class="form-check-label" for="autoSizingCheck">
Remember me
</label>
</div>
</div>
<div class="col-auto">
<button type="submit" class="btn btn-primary mb-2">Submit</button>
</div>
</div>
</form>
Вы можете заменить их опять на классы колонок определенного размера.
<form>
<div class="form-row align-items-center">
<div class="col-sm-3 my-1">
<label class="sr-only" for="inlineFormInputName">Name</label>
<input type="text" class="form-control" id="inlineFormInputName" placeholder="Jane Doe">
</div>
<div class="col-sm-3 my-1">
<label class="sr-only" for="inlineFormInputGroupUsername">Имя пользователя</label>
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text">@</div>
</div>
<input type="text" class="form-control" id="inlineFormInputGroupUsername" placeholder="Имя пользователя">
</div>
</div>
<div class="col-auto my-1">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="autoSizingCheck2">
<label class="form-check-label" for="autoSizingCheck2">
Remember me
</label>
</div>
</div>
<div class="col-auto my-1">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
И, разумеется – поддерживаются обычные формы контроля.
<form>
<div class="form-row align-items-center">
<div class="col-auto my-1">
<label class="mr-sm-2" for="inlineFormCustomSelect">Preference</label>
<select class="custom-select mr-sm-2" id="inlineFormCustomSelect">
<option selected>Choose...</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
</div>
<div class="col-auto my-1">
<div class="custom-control custom-checkbox mr-sm-2">
<input type="checkbox" class="custom-control-input" id="customControlAutosizing">
<label class="custom-control-label" for="customControlAutosizing">Remember my preference</label>
</div>
</div>
<div class="col-auto my-1">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
Вложенные формы
Используйте класс .form-inline
для отображения серии лейблов, органов контроля форм и кнопок на одном горизонтальном ряду. Органы контроля форм внутри строчных форм могут слегка отличаться от своего состояния по умолчанию.
- Органы контроля имеют
display: flex
, что скрывает пустое пространство в HTML и позволяет вам обеспечить контроль над выравниванием с помощью утилит отступа и флексбокса. - Органы контроля и группы ввода имеют
width: auto
, который «перебивает» умолчание Bootstrapwidth: 100%
. - На зонах видимости от 576рх органы контроля отображаются как строчные элементы для удобства отображения на узких зонах просмотра.
Вам может понадобиться вручную задать ширину и выравнивание каждого элемента контроля форм, используя утилиты отступов (как показано ниже).Всегда включайте <label>
в каждый элемент контроля, даже если вы хотите спрятать его с помощью класса .sr-only
от читателей, которые не используют экранные читалки.
<form class="form-inline">
<label class="sr-only" for="inlineFormInputName2">Name</label>
<input type="text" class="form-control mb-2 mr-sm-2" id="inlineFormInputName2" placeholder="Jane Doe">
<label class="sr-only" for="inlineFormInputGroupUsername2">Имя пользователя</label>
<div class="input-group mb-2 mr-sm-2">
<div class="input-group-prepend">
<div class="input-group-text">@</div>
</div>
<input type="text" class="form-control" id="inlineFormInputGroupUsername2" placeholder="Имя пользователя">
</div>
<div class="form-check mb-2 mr-sm-2">
<input class="form-check-input" type="checkbox" id="inlineFormCheck">
<label class="form-check-label" for="inlineFormCheck">
Remember me
</label>
</div>
<button type="submit" class="btn btn-primary mb-2">Submit</button>
</form>
Обычные органы контроля и выбора также поддерживаются.
<form class="form-inline">
<label class="my-1 mr-2" for="inlineFormCustomSelectPref">Preference</label>
<select class="custom-select my-1 mr-sm-2" id="inlineFormCustomSelectPref">
<option selected>Choose...</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
<div class="custom-control custom-checkbox my-1 mr-sm-2">
<input type="checkbox" class="custom-control-input" id="customControlInline">
<label class="custom-control-label" for="customControlInline">Remember my preference</label>
</div>
<button type="submit" class="btn btn-primary my-1">Submit</button>
</form>
Альтернатива скрытым лейблам
Вспомогательные технологии, такие как экранные читалки, испытают проблемы с вашими формами, если вы не включите в них лейбл для каждой формы ввода. При их использовании вы можете скрыть лейблы, используя класс .sr-only
. Есть и другие методы обеспечения читабельности лейбла для вспомогательных технологий, - такие как атрибуты aria-label
, aria-labelledby
или title
. Если ни одного из них нету, вспомогательные технологии могут обратиться к атрибуту placeholder
, при его наличии, но его использование как замену других методов придания лейбла нежелательно.
Вспомогательный текст
Блочный вспомогательный текст в формах можно создать классом .form-text
(.help-block
в BS3). Линейный текст можно гибко внедрить с помощью любого строчного элемента HTML и классов типа .text-muted
.
Связь вспомогательного текста с органами контроля форм
Вспомогательный текст должен быть явно связан с родственными его элементами контроля форм, это делается атрибутом aria-describedby
. Это обеспечит вспомогательным технологиям (таким как экранные читалки) возможность прочитать этот текст, когда юзер обращается к связанному с этим текстом элементу контроля.
Вспомогательный текст, расположенный ниже поля ввода, можно стилизовать классом .form-text
, который содержит свойство display: block
и добавляет верхний марджин для увеличения отступа от поля ввода выше.
<label for="inputPassword5">Password</label>
<input type="password" id="inputPassword5" class="form-control" aria-describedby="passwordHelpBlock">
<small id="passwordHelpBlock" class="form-text text-muted">
Your password must be 8-20 characters long, contain letters and numbers, and must not contain spaces, special characters, or emoji.
</small>
Строчный текст может использовать любой строчный элемент HTML (неважно: <small>
, <span>
или другой) с обычным классом.
<form class="form-inline">
<div class="form-group">
<label for="inputPassword6">Password</label>
<input type="password" id="inputPassword6" class="form-control mx-sm-3" aria-describedby="passwordHelpInline">
<small id="passwordHelpInline" class="text-muted">
Must be 8-20 characters long.
</small>
</div>
</form>
Деактивированные формы
Добавьте булеан disabled
в форму ввода, чтобы сделать ее светлее и предотвратить возможность взаимодействия юзера с данной формой.
Для деактивации элементов контроля внутри <fieldset>
, добавьте атрибут disabled
.
Проблемы со ссылками
По умолчанию браузеры будут рассматривать все нативные элементы контроля форм (элементы <input>
, <select>
и <button>
), находящиеся внутри <fieldset disabled>
, как деактивированные, что сделает невозможным взаимодействие с данными элементами, как с клавиатуры, так и мышью. Однако если ваша форма содержит элементы <a ... class="btn btn-*">
, они всего лишь приобретут стиль pointer-events: none
. Как было замечено в секции про деактивированное состояние кнопок (и особенно в подсекции про якоря) – это свойство CSS еще не стандартизовано и не полностью поддерживается в Opera версий 18 и ниже и в Internet Explorer 10, и не предотвратит возможность фокусировки или перехода по этим ссылкам для юзеров клавиатуры. Так что для безопасности используйте обычный JS для дезактивации таких ссылок.
Кроссбраузерность
Хотя Bootstrap применяет эти стили во всех браузерах, Internet Explorer 11 и ниже не полностью поддерживает атрибут disabled
в <fieldset>
. Используйте JS для дезактивации <fieldset>
в этих браузерах.
Валидация
Получите обратную связь и мощные возможности проверки с помощью валидации форм HTML5 – доступной во всех поддерживаемых браузерах. Выбирайте дефолтную обратную связь валидации от браузера или внедрите стандартные сообщения посредством наших встроенных классов и JavaScript.
Мы настоятельно рекомендуем пользоваться стандартными стилями валидации, поскольку встроенные стили валидации в браузере не взаимодействуют с экранными читалками.
Как это работает
Вот как валидация форм работает с Bootstrap:
- Валидация форм HTML работает на 2 псевдоклассах CSS:
:invalid
и:valid
, применяемых к элементам<input>
,<select>
и<textarea>
. - Стили этих псевдоклассов применяются к родительскому классу
.was-validated
, обычно применяемому к<form>
. В ином случае любое другое требуемое поле без значения становится невалидным при загрузке страницы. Таким образом можно выбирать, когда активировать формы (обычно после того, как нажато подтверждение). - Как резервный вариант, классы
.is-invalid
и.is-valid
можно использовать вместо псевдоклассов при серверной валидации. Они не требуют родительского класса.was-validated
. - Благодаря ограничениям, заложенным в самой природе CSS, нельзя (по крайней мере, сегодня) применять стили к элементу
<label>
, который в DOM расположен перед элементами контроля формы, без использования JavaScript. - Все современные браузеры поддерживают API проверки ограничений – серию методов JavaScript для валидации органов контроля форм.
- В качестве сообщений обратной связи в формах можно использовать таковые по умолчанию браузеров (разные для каждого браузера, и неизменяемые через CSS) или наши стандартные стили сообщений обратной связи с дополнительным HTML и CSS.
- Вы можете создать сообщения валидации методом
setCustomValidity
в JavaScript.
Знаю всё это, посмотрите следующие демонстрации использования стилей валидации форм, серверных классы и умолчаний браузеров.
Стандартные стили
Для стандартных сообщений проверки форм Bootstrap вам потребуется добавить булеан novalidate
к <form>
. Это деактивирует всплывающие сообщения обратной связи, существующие в браузере по умолчанию, но одновременно сохранит доступ JS к API валидации форм. Попробуйте войти в форму ниже, наш JavaScript выдаст вам сообщение обратной связи.
При попытке входа вы увидите, как стили :invalid
и :valid
применятся к вашим органам контроля форм.
<form class="needs-validation" novalidate>
<div class="form-row">
<div class="col-md-4 mb-3">
<label for="validationCustom01">Имя</label>
<input type="text" class="form-control" id="validationCustom01" placeholder="Имя" value="Mark" required>
<div class="valid-feedback">
Looks good!
</div>
</div>
<div class="col-md-4 mb-3">
<label for="validationCustom02">Фамилия</label>
<input type="text" class="form-control" id="validationCustom02" placeholder="Фамилия" value="Otto" required>
<div class="valid-feedback">
Looks good!
</div>
</div>
<div class="col-md-4 mb-3">
<label for="validationCustomUsername">Имя пользователя</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text" id="inputGroupPrepend">@</span>
</div>
<input type="text" class="form-control" id="validationCustomUsername" placeholder="Имя пользователя" aria-describedby="inputGroupPrepend" required>
<div class="invalid-feedback">
Please choose a username.
</div>
</div>
</div>
</div>
<div class="form-row">
<div class="col-md-6 mb-3">
<label for="validationCustom03">City</label>
<input type="text" class="form-control" id="validationCustom03" placeholder="City" required>
<div class="invalid-feedback">
Please provide a valid city.
</div>
</div>
<div class="col-md-3 mb-3">
<label for="validationCustom04">State</label>
<input type="text" class="form-control" id="validationCustom04" placeholder="State" required>
<div class="invalid-feedback">
Please provide a valid state.
</div>
</div>
<div class="col-md-3 mb-3">
<label for="validationCustom05">Zip</label>
<input type="text" class="form-control" id="validationCustom05" placeholder="Zip" required>
<div class="invalid-feedback">
Please provide a valid zip.
</div>
</div>
</div>
<div class="form-group">
<div class="form-check">
<input class="form-check-input" type="checkbox" value="" id="invalidCheck" required>
<label class="form-check-label" for="invalidCheck">
Agree to terms and conditions
</label>
<div class="invalid-feedback">
You must agree before submitting.
</div>
</div>
</div>
<button class="btn btn-primary" type="submit">Submit form</button>
</form>
<script>
// Example starter JavaScript for disabling form submissions if there are invalid fields
(function() {
'use strict';
window.addEventListener('load', function() {
// Fetch all the forms we want to apply custom Bootstrap validation styles to
var forms = document.getElementsByClassName('needs-validation');
// Loop over them and prevent submission
var validation = Array.prototype.filter.call(forms, function(form) {
form.addEventListener('submit', function(event) {
if (form.checkValidity() === false) {
event.preventDefault();
event.stopPropagation();
}
form.classList.add('was-validated');
}, false);
});
}, false);
})();
</script>
Умолчания браузера
Не нужны стандартные сообщения обратной связи? Не хотите писать скрипты JavaScript для изменения поведения форм? Используйте умолчания браузера. Попробуйте войти в форму ниже. В зависимости от вашего браузера и ОС вы увидите немного разные стили обратной связи.
Хотя эти сообщения обратной связи нельзя настраивать CSS, их можно настроить с JavaScript.
Сторона сервера
Мы рекомендуем использовать валидацию со стороны клиента, но если вам понадобится таковая со стороны сервера, вы можете обозначать валидные и невалидные поля форм классами .is-invalid
и .is-valid
. Заметим, что их можно также использовать с классом .invalid-feedback
.
Поддерживаемые элементы
Стили проверки доступны для следующих элементов управления формы и компонентов:
<input>
и<textarea>
с.form-control
(включая до одного.form-control
в группах ввода)<select>
с.form-select
или.custom-select
.form-check
.custom-checkbox
и.custom-radio
.custom-file
Всплывающие подсказки
Если разметка ваших форм позволит, вы можете заменить классы .{valid|invalid}-feedback
классами .{valid|invalid}-tooltip
- для отображения обратной связи валидации, стилизованной под всплывающую подсказку. Для правильного позиционирования всплывающей подсказки удостоверьтесь, что родительский элемент содержит position: relative
. В примере ниже наши классы колонок уже имеют этот атрибут, но ваш проект может потребовать иные настройки.
Пользовательская настройка
Состояния проверки могут быть настроены с помощью Sass с помощью карты $form-validation-states
. Расположенная в нашем файле _variables.scss
, эта карта Sass зацикливается, чтобы создать valid
/invalid
состояния проверки по умолчанию. В комплект входит вложенная карта для настройки цвета и значка каждого состояния. Хотя никакие другие состояния не поддерживаются браузерами, пользователи, использующие пользовательские стили, могут легко добавлять более сложные формы обратной связи.
Обратите внимание, что мы не рекомендуем настраивать эти значения, не изменяя миксин состояния проверки формы form-validation-state
.
Обычные формы
Для более гибкой настройки и кроссбраузерной согласованности используйте наши обычные элементы форм в качестве заменителей таковых, присутствующих в браузерах.
Чекбоксы и кнопки «радио»
Каждый чекбокс и «радио» обернут в <div>
с помощью sibling <span>
для создания настраиваемого элемента управления и <label>
для сопроводительного текста. Структурно, это тот же подход, что и наша стандартная .form-check
.
Мы используем селектор вложенных элементов (~
) для всех состояний <input>
- как :checked
– для правильной стилизации наших обычных индикаторов форм. При сочетании его с классом .custom-control-description
можно стилизовать текст каждого элемента, основанного на состоянии <input>
.
Мы спрятали дефолтные <input>
с помощью opacity
и используем класс .custom-control-indicator
для создания нового обычного индикатора формы на его обычном месте. К несчастью мы не можем создать таковой, просто используя <input>
, т.к. content
в CSS не работает с этим элементом.
В «проверенных» состояниях используются встроенные, созданные по стандарту кодирования двоичных данных при помощи только 64 символов ASCII иконки (SVG) из Open Iconic. Это улучшает контроль стилизации и позиционирования в браузерах и девайсах.
Чекбоксы
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="customCheck1">
<label class="custom-control-label" for="customCheck1">Check this custom checkbox</label>
</div>
Стандартные чекбоксы могут использовать псевдокласс :indeterminate
, заданный вручную через JavaScript (т.к. нет в HTML атрибута для его спецификации).
Если вы используете jQuery, делайте так:
«Радио»
<div class="custom-control custom-radio">
<input type="radio" id="customRadio1" name="customRadio" class="custom-control-input">
<label class="custom-control-label" for="customRadio1">Toggle this custom radio</label>
</div>
<div class="custom-control custom-radio">
<input type="radio" id="customRadio2" name="customRadio" class="custom-control-input">
<label class="custom-control-label" for="customRadio2">Or toggle this other custom radio</label>
</div>
Горизонтально
<div class="custom-control custom-radio custom-control-inline">
<input type="radio" id="customRadioInline1" name="customRadioInline1" class="custom-control-input">
<label class="custom-control-label" for="customRadioInline1">Toggle this custom radio</label>
</div>
<div class="custom-control custom-radio custom-control-inline">
<input type="radio" id="customRadioInline2" name="customRadioInline1" class="custom-control-input">
<label class="custom-control-label" for="customRadioInline2">Or toggle this other custom radio</label>
</div>
Деактивированные
Добавьте булеан disabled
в <input>
и стандартный индикатор и лейбл-описание автоматически соответственно стилизуются.
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="customCheckDisabled" disabled>
<label class="custom-control-label" for="customCheckDisabled">Check this custom checkbox</label>
</div>
<div class="custom-control custom-radio">
<input type="radio" id="radio3" name="radioDisabled" id="customRadioDisabled" class="custom-control-input" disabled>
<label class="custom-control-label" for="customRadioDisabled">Toggle this custom radio</label>
</div>
Выключатели
Выключатель имеет разметку пользовательского флажка, но использует класс .custom-switch
для рендеринга тумблера. Выключатели также поддерживают атрибут отключенния disabled
.
Меню выбора
Добавьте в стандартные меню <select>
класс .custom-select
для придания им стандартных стилей.
<select class="custom-select">
<option selected>Open this select menu</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
Вы также можете выбирать из небольших и больших пользовательских выборок, чтобы соответствовать нашим текстовым вводам аналогичного размера.
<select class="custom-select custom-select-lg mb-3">
<option selected>Open this select menu</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
<select class="custom-select custom-select-sm">
<option selected>Open this select menu</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
Также поддерживается множественный атрибут multiple
:
<select class="custom-select" multiple>
<option selected>Open this select menu</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
Как и атрибут size size
:
<select class="custom-select" size="3">
<option selected>Open this select menu</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
Диапазон
Создавайте обычные элементы контроля <input type="range">
с помощью класса .custom-range
. Ползунок (т.е. его фон и все элементы) и элемент управления («каретка») стилизованы для одинакового вида во всех браузерах. Т.к. лишь IE и Firefox поддерживают «заполнение» «трека» (т.е. дорожки) справа или слева от ползунка, для индикации прогресса проигрывания, сегодня мы не поддерживаем это свойство.
Ползунок имеет встроенные значения
min
и max
—0
и 100
. Вы можете задать новые значения. используя атрибуты min
и max
.
По умолчанию значения ползунка заданы целыми числами, что можно изменить, задав значение step
, например step="0.5"
.
Загрузка файлов
Рекомендуемый плагин для анимации ввода пользовательских файлов: bs-custom-file-input, это то, что мы сейчас используем здесь, в наших документах.
Загрузка файлов – самая «прожорливая» из всех и требует дополнительного JavaScript для оснащения её функциональностью «Выберите файл» и текста названия выбранного файла.
<div class="custom-file">
<input type="file" class="custom-file-input" id="customFile">
<label class="custom-file-label" for="customFile">Choose file</label>
</div>
Мы скрываем файл по умолчанию <input>
через opacity
и вместо этого ставим <label>
. Кнопка генерируется и позиционируется с ::after
. Наконец, мы объявляем ширину width
и высоту height
на <input>
для правильного интервала для окружающего содержимого.
Перевод или настройка строк с помощью SCSS
Псевдокласс :lang()
pseudo-class используется для легкого перевода текста “Browse” и “Choose file…» на другие языки. Просто перепишите или добавьте к переменной SCSS $custom-file-text
нужный тэг языка и локализованных строк. Строки на английском можно настроить тем же способом. Например, вот как можно добавить перевод на испанский (тэг es
):
Здесь псевдокласс lang(es)
в используется для загрузки файла на испанском языке:
<div class="custom-file">
<input type="file" class="custom-file-input" id="customFileLang" lang="es">
<label class="custom-file-label" for="customFileLang">Seleccionar Archivo</label>
</div>
Для правильного перевода Вам потребуется правильно установить язык вашего документа (или суб-дерева). Среди прочих методов, это можно сделать атрибутом языка
или заголовком HTTP Content-Language
.
Перевод или настройка строк с помощью HTML
Bootstrap также предоставляет способ перевода текста «Обзор» в HTML с помощью атрибута data-browse
, который можно добавить к пользовательской метке ввода (например, на голландском языке):