Floating labels (плавающие метки)
Плавающие метки (Floating labels) — это удобный способ сделать формы более компактными и современными, позволяя метке (label) перемещаться внутри поля ввода. Это полезно для повышения читаемости и улучшения пользовательского опыта.
Ниже подробно описано, как использовать плавающие метки в Bootstrap 5, с примерами, рекомендациями и дополнительными разъяснениями.
Что такое плавающие метки?
Плавающая метка — это элемент, который изначально отображается внутри текстового поля (или textarea) как подсказка. Когда пользователь начинает ввод текста, метка "плавает" вверх, оставаясь видимой над полем ввода.
Основные преимущества:
- Компактность: экономит пространство формы.
- Эстетика: выглядит современно и привлекательно.
- Понятность: пользователю сразу видно, какое поле он заполняет.
Базовая реализация (пример)
В Bootstrap 5 плавающие метки создаются с помощью классов form-floating
. Пример базового кода:
<div class="form-floating mb-3">
<input type="email" class="form-control" id="floatingInput" placeholder="name@example.com">
<label for="floatingInput">Адрес электронной почты</label>
</div>
Объяснение кода:
form-floating
: оборачивает поле ввода и метку, чтобы включить плавающий эффект.form-control
: класс Bootstrap для стилизации полей ввода.placeholder
: нужен для правильного отображения метки, но его текст не будет виден.label
: метка, связанная с полем через атрибутfor
(должен совпадать сid
у<input>
).
Если value
уже определён, <label>
автоматически подстраивается под его положение.
<form class="form-floating">
<input type="email" class="form-control" id="floatingInputValue" placeholder="name@example.com" value="test@example.com">
<label for="floatingInputValue">Ввод со значением</label>
</form>
Стили проверки формы (валидация) также работают.
<form class="form-floating">
<input type="email" class="form-control is-invalid" id="floatingInputInvalid" placeholder="name@example.com" value="test@example.com">
<label for="floatingInputInvalid">Недопустимый ввод</label>
</form>
Поддерживаемые элементы
<input>
: текстовые поля, email, пароли и т. д.<textarea>
: для больших объемов текста.
Ограничения
Не рекомендуется использовать с элементами select
. Для выпадающих списков стоит использовать другие подходы.
Примеры использования
Поле для ввода пароля (input type="password")
<div class="form-floating mb-3">
<input type="password" class="form-control" id="floatingPassword" placeholder="Password">
<label for="floatingPassword">Пароль</label>
</div>
Поле для текстовой области (textarea)
По умолчанию, <textarea>
с .form-control
будет иметь ту же высоту, что и <input>
.
<div class="form-floating">
<textarea class="form-control" placeholder="Оставьте комментарий здесь" id="floatingTextarea"></textarea>
<label for="floatingTextarea">Комментарии</label>
</div>
Чтобы задать собственную высоту для <textarea>
, не используйте атрибут rows
. Вместо этого задайте явное значение height
. (Встроенное или с помощью пользовательского CSS).
<div class="form-floating">
<textarea class="form-control" placeholder="Оставьте комментарий здесь" id="floatingTextarea2" style="height: 100px"></textarea>
<label for="floatingTextarea2">Комментарии</label>
</div>
Выпадающие списки (select)
Помимо .form-control
, плавающие метки доступны только в .form-select
. Они работают так же, но, в отличие от <input>
, всегда отображают <label>
в плавающем состоянии. Выделение с помощью size
и multiple
не поддерживается.
<div class="form-floating">
<select class="form-select" id="floatingSelect" aria-label="Пример выбора плавающей метки">
<option selected>Откройте это меню выбора</option>
<option value="1">Один</option>
<option value="2">Два</option>
<option value="3">Три</option>
</select>
<label for="floatingSelect">Работает с выбранными</label>
</div>
Несколько плавающих меток в одной форме
<form>
<div class="form-floating mb-3">
<input type="text" class="form-control" id="floatingName" placeholder="Ваше имя">
<label for="floatingName">Имя</label>
</div>
<div class="form-floating mb-3">
<input type="email" class="form-control" id="floatingEmail" placeholder="name@example.com">
<label for="floatingEmail">Электронная почта</label>
</div>
<div class="form-floating">
<input type="password" class="form-control" id="floatingPassword" placeholder="Password">
<label for="floatingPassword">Пароль</label>
</div>
</form>
Отключенные поля (disabled)
Добавьте логический атрибут disabled
к элементу ввода, текстовому полю или выбору, чтобы сделать его неактивным, убрать события указателя и предотвратить фокусировку.
<div class="form-floating mb-3">
<input type="email" class="form-control" id="floatingInputDisabled" placeholder="name@example.com" disabled>
<label for="floatingInputDisabled">Адрес электронной почты</label>
</div>
<div class="form-floating mb-3">
<textarea class="form-control" placeholder="Оставьте комментарий здесь" id="floatingTextareaDisabled" disabled></textarea>
<label for="floatingTextareaDisabled">Комментарии</label>
</div>
<div class="form-floating mb-3">
<textarea class="form-control" placeholder="Оставьте комментарий здесь" id="floatingTextarea2Disabled" style="height: 100px" disabled>Disabled textarea with some text inside</textarea>
<label for="floatingTextarea2Disabled">Комментарии</label>
</div>
<div class="form-floating">
<select class="form-select" id="floatingSelectDisabled" aria-label="Плавающая метка отключена, выберите пример" disabled>
<option selected>Откройте это меню выбора</option>
<option value="1">Один</option>
<option value="2">Два</option>
<option value="3">Три</option>
</select>
<label for="floatingSelectDisabled">Работает с выбранными</label>
</div>
Открытый текст только для чтения
Плавающие метки также поддерживают .form-control-plaintext
-теги, которые могут быть полезны для переключения с редактируемого <input>
-тега на обычный текст без изменения макета страницы.
<div class="form-floating mb-3">
<input type="email" readonly class="form-control-plaintext" id="floatingEmptyPlaintextInput" placeholder="name@example.com">
<label for="floatingEmptyPlaintextInput">Пустой ввод</label>
</div>
<div class="form-floating mb-3">
<input type="email" readonly class="form-control-plaintext" id="floatingPlaintextInput" placeholder="name@example.com" value="name@example.com">
<label for="floatingPlaintextInput">Ввод со значением</label>
</div>
Входные группы (input-group)
Также поддерживаются плавающие метки в .input-group
.
<div class="input-group mb-3">
<span class="input-group-text">@</span>
<div class="form-floating">
<input type="text" class="form-control" id="floatingInputGroup1" placeholder="Имя пользователя">
<label for="floatingInputGroup1">Имя пользователя</label>
</div>
</div>
При использовании .input-group
и .form-floating
вместе с проверкой формы -feedback
следует размещать вне .form-floating
, но внутри .input-group
. Это означает, что обратная связь будет отображаться с помощью JavaScript.
<div class="input-group has-validation">
<span class="input-group-text">@</span>
<div class="form-floating is-invalid">
<input type="text" class="form-control is-invalid" id="floatingInputGroup2" placeholder="Имя пользователя" required>
<label for="floatingInputGroup2">Имя пользователя</label>
</div>
<div class="invalid-feedback">
Пожалуйста, укажите имя пользователя.
</div>
</div>
Планировка и пользовательские стили
Работа с сеткой
При работе с системой сеток Bootstrap обязательно размещайте элементы формы в классах столбцов.
<div class="row g-2">
<div class="col-md">
<div class="form-floating">
<input type="email" class="form-control" id="floatingInputGrid" placeholder="name@example.com" value="mdo@example.com">
<label for="floatingInputGrid">Адрес электронной почты</label>
</div>
</div>
<div class="col-md">
<div class="form-floating">
<select class="form-select" id="floatingSelectGrid">
<option selected>Откройте это меню выбора</option>
<option value="1">Один</option>
<option value="2">Два</option>
<option value="3">Три</option>
</select>
<label for="floatingSelectGrid">Работает с выбранными</label>
</div>
</div>
</div>
Изменение цвета фона и текста
Чтобы изменить фон или текст поля ввода, используйте утилиты Bootstrap:
<div class="form-floating mb-3">
<input type="text" class="form-control bg-light text-dark" id="floatingCustom" placeholder="Custom field">
<label for="floatingCustom">Кастомное поле</label>
</div>
Добавление рамок
<div class="form-floating mb-3">
<input type="text" class="form-control border border-primary" id="floatingBorder" placeholder="Border field">
<label for="floatingBorder">Поле с рамкой</label>
</div>
Адаптивность и кроссбраузерность
Плавающие метки в Bootstrap 5 полностью адаптивны и поддерживают основные современные браузеры. Однако, чтобы убедиться, что дизайн корректно работает в старых версиях браузеров, рекомендуется тестировать готовый код.
Советы для адаптивности:
- Используйте утилиты отступов (
mb-3
,mt-2
и т. д.) для управления расстояниями между элементами. - Тестируйте на устройствах с различной шириной экрана./li>
Советы и рекомендации
- Проверяйте читаемость текста меток: убедитесь, что метка остается читаемой даже на тёмном фоне.
- Используйте placeholder: даже если он не виден, он помогает обеспечить правильную работу эффекта.
- Проверка доступности (accessibility): убедитесь, что атрибуты
id
иfor
правильно настроены для работы с экранными считывателями. - Не злоупотребляйте: плавающие метки лучше подходят для минималистичных форм. Если форма сложная, можно использовать более традиционные подходы.
CSS
Переменные Sass
$form-floating-height: add(3.5rem, $input-height-border);
$form-floating-line-height: 1.25;
$form-floating-padding-x: $input-padding-x;
$form-floating-padding-y: 1rem;
$form-floating-input-padding-t: 1.625rem;
$form-floating-input-padding-b: .625rem;
$form-floating-label-height: 1.5em;
$form-floating-label-opacity: .65;
$form-floating-label-transform: scale(.85) translateY(-.5rem) translateX(.15rem);
$form-floating-label-disabled-color: $gray-600;
$form-floating-transition: opacity .1s ease-in-out, transform .1s ease-in-out;
Часто задаваемые вопросы (FAQ)
overflow: hidden
).Теперь вы знаете, как использовать плавающие метки в Bootstrap 5 для создания удобных и красивых форм!