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