на главную сниппетов
<input> в HTML самый интересный.
type элемента
<input> может принимать 22 разных значения, которые не только меняют его поведение, но и влияют на внешний вид (зачастую в ущерб стилистике).
<input> отвечает за всё, начиная с текстового ввода и чекбоксов, заканчивая переключателями и кнопкой для сброса всех полей в форме. В этой статье я опишу не только
различные типы
<input>, но и сопутствующие атрибуты, о которых вы могли не знать, и которые делают этот элемент более удобным и применимым в различных ситуациях. Приступим!
inputmode позволит оптимизировать клавиатуру под предполагаемый тип ввода.
inputmode на
email, и на основной клавиатуре отобразится символ
@. Если же вас интересуют числа, установите
inputmode на
numeric или
decimal, что приведёт к отображению панели с цифрами. Такой подход годится в случаях, когда нужно ввести число, но тип
number не подходит. Например, при вводе одноразового пароля или номера кредитной карты.
<input type="text" inputmode="numeric" />
inputmode приведён ниже вместе с соответствующими им символами на клавиатуре iOS. На Android символы будут другие.
none: отключает показ виртуальной клавиатуры. Используется, когда вы хотите реализовать собственную (вряд ли вам это понадобится);text: вариант по умолчанию;numeric: только числа;decimal: числа и десятичная запятая;tel: числа и другие символы для набора номера;url: стандартная клавиатура с точкой, прямым слэшем и .com вместо пробела;email: стандартная клавиатура с небольшим пробелом, символом @ и точкой;search: стандартная клавиатура со слегка уменьшенным пробелом, точкой и выделенной кнопкой go, заменяющей return.
inputmode также поддерживается в <textarea> и всех элементах режима
contenteditable.
<input>, но вы не хотите, чтобы пользователь мог изменять его содержимое, или собираетесь менять его иным программным способом, то вам поможет атрибут
disabled. Однако нужно учитывать, что отключённые элементы ввода удаляются из дерева доступности, становясь недоступными для пользователей специальных возможностей. Кроме того, содержимое отключённых элементов ввода с формой не отправляется.
disabled является атрибут
readonly. Он делает поле неактивным, но при этом его содержимое остаётся доступным и будет отправляться с остальным вводом формы.
<label for="input">The label</label>
<input type="text" value="You can't change this" readonly id="input" />
Примечание от Manuel: не все скринридеры объявляют такое поле как «только для чтения». Лучше будет сначала это проверить, чтобы понять, нужно ли сопроводить его дополнительным описанием.
:read-only, а на элементы, которые можно считывать и записывать – с помощью псевдокласса
:read-write.
readonly применим только для
<input>, выступающих в качестве текстовых элементов управления, и элементов
<textarea>.
readonly вместо
disabled зависит от того, должен ли элемент использоваться на странице. Не забудьте это учесть.
getUserMedia. Но доступ к камере также можно реализовать декларативно. В поле
<input> загрузки файла можно указать атрибут
capture, который будет заставлять элемент активировать камеру устройства.
capture="user", чтобы выбиралась фронтальная камера. Если же целью является съёмка окружающего пространства, тогда установите
capture="environment", чтобы активировалась тыльная камера. Устройство может переопределять это поведение, если, например не обнаружит перед фронтальной камерой пользователя.
accept, с помощью которого можно указывать тип контента, который вы хотите получить с камеры. Если в итоге вы выберете фотографии, камера активирует режим фотосъёмки, а если вы решите снять видео, то активируется режим видеозаписи.
<label for="input">Cheeeeese</label>
<input type="file" capture="user" accept="image/jpeg,image/png" id="input" />
spellcheck – это универсальный атрибут, который можно использовать для любого элемента. С его помощью активируется проверка правописания в браузере для элементов, в которых также установлен параметр
contenteditable="true". Он, в том числе, подходит для элементов
<input> и определённо стоит вашего внимания.
<input> по-разному. Firefox и Safari на настольных системах не будут выполнять проверку правописания в этих элементах без установки атрибута
spellcheck. А вот Chrome и Safari на iOS будут. Чтобы добиться согласованного поведения в разных браузерах, вам следует устанавливать атрибут
spellcheck на
true либо
false в зависимости от содержимого
<input>.
spellcheck="true". Если же поле будет использоваться для идентификаторов вроде имён пользователей, адресов email, URL или иной информации, которая вряд ли есть в словаре, лучше установить
spellcheck="false".
<input> содержит чувствительную информацию вроде личных данных, таких как имена, даты рождения или пароли, то лучше установить
spellcheck="false", чтобы этого избежать.
<label for="input">Name</label>
<input type="text" spellcheck="false" id="input" />
<input>, имеющий тип
password, будет держать своё значение при себе. Если же вы задействуете функциональность показа пароля, которая устанавливает тип элемента на
text, то это поле окажется открытым для проверки правописания.
spellcheck с учётом всех описанных рисков поможет вашим пользователям при вводе данных в формы, не подвергнув их личную информацию риску разглашения.
<input> первое слово будет по умолчанию начинаться с заглавной буквы, продолжаясь строчными. И это удобно при написании предложения, но, к примеру в именах и адресах с заглавной буквы должно начинаться каждое слово. При этом иные типы ввода вроде идентификаторов авиабилетов и почтовых кодов Великобритании предполагают использование только заглавных букв.
autocapitalize, который избавит пользователей от необходимости использовать
Shift для ввода текста в нужном формате.
autocapitalize="words", а для использования исключительно заглавных букв –
autocapitalize="characters".
<label for="input">Name</label>
<input type="text" name="full-name" autocapitalize="words" id="input" />
autocapitalize не работает там, где это бессмысленно, например для элементов
<input> с типом
email,
url и, что самое главное,
password.
autocomplete.
autocomplete может получать
огромное число значений, связывающих
<input> со многими вещами, о которых браузер знает или может узнать.
autocomplete на значения вроде
username или
email. В случае паролей можете использовать значение
new-password, чтобы браузер не пытался подставить существующий пароль, а просил ввести новый. Также можно использовать значение
current-password, чтобы браузер или менеджер паролей автоматически подставляли в поле известный пароль пользователя.
street-address,
country-name и
postal-code. В коммерческих формах можно дополнять эти значения уточняющими идентификаторами, чтобы разделять адреса для
billing (выставления счёта) и
shipping (доставки).
<label for="input">Address</label>
<input type="text" autocomplete="street-address shipping" name="street-address" id="input" />
one-time-password, указывающее браузеру о необходимости просмотра последних сообщений и извлечения одноразового пароля для подстановки в поле.
autocomplete значение
webauthn, чтобы задействовать в этом процессе
автозаполнение.
autocomplete, то этого будет
достаточно даже для выполнения правила WCAG уровня AA «
Определение цели ввода». Давая браузеру детальные указания в отношении типа предполагаемого содержимого полей ввода, мы не только экономим время пользователей, но и избавляем их от лишнего набора.
autocomplete="off" отключит запоминание браузером вводимого текста. Такое решение актуально для полей, в которых каждый раз ожидается разный ввод, например CAPTCHA.
<input>, который имеет множество опций, позволяющих сделать текстовые формы более удобными и доступными.
inputmode. Если вы хотите отключить возможность изменения
<input>, сохранив возможность его прочтения и отправки, выбирайте
readonly вместо
disabled. Активировать камеру на мобильных устройствах можно с помощью
capture. Атрибут
spellcheck позволяет задействовать проверку правописания. Главное не забывать отключать её для чувствительного ввода. Помимо этого, вы можете экономить время пользователей с помощью
autocapitalize, регулируя правила использования заглавных букв при вводе. И, наконец,
autocomplete позволяет браузеру автоматически подставлять содержимое в поля, избавляя пользователей от лишних нажатий клавиш.
на главную сниппетов