Верстка форм
WARNING
Раздел в процессе обсуждения. Материал можно рассматривать как рекомендацию, но не как четкое руководство.
Общие сведения
Примеры и соглашения
Единой структуры для всех форм нет, слишком много частностей. Но имеется ряд рекомендаций, которым нужно следовать. Все зависит от сложности дизайна и функционала формы.
Разметка
Практически всегда элементы формы (поля ввод, кнопки) должны быть обернуты в тэг <form>
.
У тега <form>
обязательно должен быть атрибут action
. Если URL для него не определен, используйте action="#"
. Даже когда нужно послать данные аяксом по какому-то URL, то стоит создать форму, прописать ей этот URL в атрибут action
и брать его в JS для отправки данных.
Пример верстки формы поиска попроще:
<div class="search">
<form class="form search__form" action="/search.php">
<div class="form__row">
<input type="search" class="form__input form__input_search">
<button class="form__btn form__btn_find">Найти</button>
</div>
</form>
</div>
Пример верстки формы поиска посложнее (например, дизайн более замороченный):
<div class="search">
<form class="form search__form" action="/search.php">
<div class="form__row">
<div class="form__control">
<input type="search" class="form__input form__input_search">
</div>
<div class="form__control">
<button class="form__btn form__btn_find">Найти</button>
</div>
</div>
</form>
</div>
Отправка на сервер
Должен быть method
.
Нужны name
филдам.
Валидация и ошибки
Класс для ошибок.
Плагин для валидации.
HTML5 возможности.
Подписи к элементам ввода
Подписи к элементам можно сделать с помощью тега label
. Использовать его предпочтительнее, чем атрибут placeholder
.
Задача label
— активировать элемент ввода при клике. Этого можно добиться или вложив элемент ввода внутрь или через атрибут for
:
<!-- Вложили элемент ввода в label -->
<label>
Поиск:
<input type="search" class="form-input form-input_search">
</label>
<!-- Использовали атрибут `for` -->
<label for="searchField">Поиск:</label>
<input id="searchField" type="search" class="form-input form-input_search">
Автозаполнение
По-умолчанию браузер пытается заполнить элементы формы самостоятельно. Это хорошо, упрощает жизнь пользователю. Но иногда это бывает не нужно.
Чтобы убрать автозаполнение, используйте атрибут autocomplete="off"
для формы или элемента ввода.