Тег input в HTML: что это, типы и атрибуты

Тег input (от английского input, «ввод») создаёт элемент для ввода данных: текстовое поле, флажок, переключатель, ползунок, выбор даты или файла и даже кнопку. Что получится, решает атрибут type. Это пустой тег: содержимого и закрывающего тега у него нет. Без type получается однострочное текстовое поле, а в отправку формы поле попадает только вместе с атрибутом name.

Поле работает внутри тега form и сам по себе: вне формы оно тоже выводится, а значение читает скрипт. Многострочный текст, выбор из готового списка и кнопку с содержимым записывают другими тегами группы: textarea, select и button.

HTML
<input type="email" name="mail" placeholder="you@site.ru" required>

Тег input в HTML: что это, зачем нужен и закрывается ли

Тег input строчный: по умолчанию его display равен inline-block, поэтому поля встают в строку с текстом. Закрывающий тег не нужен. Запись <input /> с косой чертой допустима и ничего не меняет, а </input> браузер отбрасывает. Текст, записанный между ними, остаётся рядом с полем, а не внутри: у input не бывает содержимого.

HTML
<input name="a">
<input name="a" />
<input name="a"></input>
<input name="a">внутри</input>

Пример: что делает браузер с закрывающим тегом

Результат

Выберите запись: под результатом узлы, которые получились на странице, и сколько их внутри поля.

Атрибут type тега input: все значения и что они создают

Атрибут type задаёт вид и поведение поля. Значений 22, все перечислены в таблице. Если type не записан или в нём записано неизвестное значение, браузер читает его как text. Так же читается устаревшее datetime, которое убрали из стандарта. Подробный разбор для новичков есть в уроке «Поля ввода: input и его типы».

HTML
<input type="text" name="pet">
<input type="number" name="age">
<input type="checkbox" name="agree">

Пример: выберите значение type

Результат

Выберите значение в списке: под результатом свойство type, роль поля для программ чтения с экрана и что уйдёт в отправку.

Значение typeЧто создаётЗначение по умолчаниюЧто уходит в отправку
textОднострочное текстовое поле""Введённый текст
searchПоле поиска, событие search""Введённый текст
passwordПоле, где символы скрыты точками""Введённый текст
emailАдрес почты с проверкой формата""Введённый текст без пробелов по краям
telТелефон без проверки формата""Введённый текст
urlАдрес ссылки с проверкой формата""Введённый текст без пробелов по краям
numberЧисло со стрелками""Число как текст
rangeПолзунок от 0 до 10050Число как текст
dateВыбор даты""Дата 2026-10-05
timeВыбор времени""Время 14:30
datetime-localДата и время без часового пояса""Дата и время 2026-10-05T14:30
monthМесяц и год""Месяц 2026-10
weekНеделя и год""Неделя 2026-W41
colorВыбор цвета#000000Цвет #rrggbb строчными буквами
checkboxФлажокonЗначение value, только если флажок отмечен
radioПереключатель в группе по nameonЗначение value выбранного пункта
fileВыбор файла""Название файла или его содержимое, зависит от enctype
hiddenСкрытое поле""Значение value
buttonКнопка без действия""Не уходит
submitКнопка отправки формы""Уходит, если нажата и у неё есть name
resetКнопка сброса полей""Не уходит
imageКнопка-картинка""Координаты клика x и y

Текстовые типы input: text, search, password, email, tel, url

Типы text, search, password, email, tel и url однострочные. Они различаются очисткой значения и проверкой. Перенос строки из значения убирается у всех. Типы email и url дополнительно обрезают пробелы по краям и проверяют формат: для email достаточно вида a@b, но кириллица до знака @ проверку не проходит, для url нужна схема, например https://: запись example.com без неё не подходит. Тип tel формат не проверяет, потому что телефоны записывают по-разному. Тип search в Chrome даёт событие search на клавише Enter и при очистке поля.

HTML
<input type="email" name="mail">
<input type="tel" name="phone">
<input type="url" name="site">

Пример: что браузер делает со значением

Результат

Выберите тип: скрипт записывает в поле строку с пробелами и переносом, под результатом то, что осталось.

Числа, даты и цвет в input: number, range, date, time, color

Тип number принимает число и проверяет границы: min, max и шаг step. Шаг считается от min: при min="1" и step="2" подходят 1, 3, 5, 7, 9. Если записать в поле текст, который не число, браузер очистит значение. Свойство valueAsNumber отдаёт число, а не строку. Типы, которые ведут себя не так, как кажется, разобраны в отдельном уроке. Ползунок range по умолчанию идёт от 0 до 100 и стоит на 50, а значение за границами заменяется ближайшей границей. Для даты, времени и цвета действует строгий формат записи, независимо от того, как поле показано человеку: если значение не подходит, поле остаётся пустым, а у color берётся чёрный.

HTML
<input type="number" name="qty" min="1" max="10" step="2">
<input type="range" name="vol" min="0" max="10">
<input type="date" name="day" min="2026-01-01">

Пример: как браузер читает значение

Результат

Выберите тип: в атрибут value записано значение, под результатом то, что осталось в поле. У number введите число сами.

Флажки и переключатели: input type checkbox и radio

Флажок checkbox и переключатель radio передают данные только в отмеченном состоянии. Отмеченный элемент даёт значение value, а если оно не записано, то on. Радиокнопки собираются в группу по одинаковому name, и отметить можно только одну. Группа действует внутри одной формы: в двух разных формах радиокнопки с одним name не связаны, и отметить можно обе. Начальное состояние задаёт атрибут checked.

HTML
<input type="checkbox" name="agree" value="yes" checked>
<input type="radio" name="size" value="s">
<input type="radio" name="size" value="m">

Пример: что уходит от флажков и радиокнопок

Результат

Выберите запись и нажимайте на элементы: под результатом данные каждой формы.

Выбор файла: input type file, accept и multiple

Тип file открывает окно выбора файла. Атрибут accept подсказывает окну, какие файлы показать (.png, image/*), но проверку не выполняет: тип файла проверяют на сервере. Атрибут multiple разрешает выбрать несколько файлов, их список находится в свойстве files. Путь к файлу браузер скрывает, и в value виден только префикс C:\fakepath\ с названием. Что уйдёт в отправку, решает enctype у формы: при обычном кодировании только название файла, при multipart/form-data содержимое целиком.

HTML
<form method="post" enctype="multipart/form-data">
  <input type="file" name="doc" accept=".png" multiple>
</form>

Пример: что уходит при выборе файла

Результат

Выберите кодирование и нажмите кнопку добавления файла: под результатом то, что собрал бы браузер.

Кнопки и скрытое поле: submit, reset, button, image, hidden

У input есть четыре кнопочных типа и скрытое поле. Тип submit отправляет форму, а надпись по умолчанию задаёт браузер. Тип reset возвращает поля к значениям из разметки. Тип button сам ничего не делает и нужен скрипту. Тип image работает как submit и добавляет координаты клика. Скрытое поле hidden не показывается, но его значение уходит вместе с формой. Чем input type="submit" отличается от тега button, разобрано в уроке «Кнопки: button vs input type=submit».

HTML
<input type="submit" value="Отправить">
<input type="reset" value="Сбросить">
<input type="hidden" name="h" value="7">

Пример: поведение кнопочных типов

Результат

Выберите тип, измените текст в поле и нажмите кнопку: под результатом данные, которые ушли бы с формой.

Атрибуты name и value: что уходит в отправку

Атрибут name задаёт название, под которым значение уходит с формой. Поле без name или с пустым name видно на странице, но в отправку не входит. Атрибут value задаёт начальное значение. Свойство value в скрипте хранит текущий текст. Пока человек не менял поле, изменение атрибута меняет и показанный текст. После ввода связь рвётся: атрибут остаётся начальным значением и доступен как defaultValue, а на экране остаётся то, что ввели.

HTML
<input name="pet" value="Кот">
<script>
  input.setAttribute("value", "Пёс");
</script>

Пример: name, value и defaultValue

Результат

Выберите запись. В последней измените текст и нажмите кнопку: под результатом свойство и атрибут.

Проверка значения: required, pattern, minlength, maxlength

Встроенная проверка срабатывает при отправке формы и отражается в validity. Атрибут required требует непустое значение, а для флажка отметку. Атрибут pattern задаёт регулярное выражение, которому должно подходить всё значение целиком. Атрибуты minlength и maxlength ограничивают длину: maxlength режет ввод с клавиатуры, а запись скриптом не обрезает. minlength проверяют только после правки человеком. Обычное эмодзи считается за два символа, составное за несколько. Атрибуты min, max и step работают для чисел, дат и ползунка, а для text игнорируются. Подробно проверку описывает урок «Встроенная валидация форм».

HTML
<input name="code" required pattern="[a-z]{3}" minlength="3" maxlength="3">

Пример: ошибки проверки в validity

Результат

Выберите атрибут, введите текст или нажмите кнопку записи скриптом: под результатом найденные ошибки.

Остальные атрибуты input: readonly, disabled, placeholder и другие

Атрибут readonly запрещает правку текста, но поле остаётся в отправке и принимает фокус. Атрибут disabled отключает поле целиком: фокуса нет, в отправку оно не входит, проверка его пропускает. Атрибут placeholder показывает подсказку в пустом поле, но значением не становится. У флажка и переключателя readonly не действует. Подсказки из списка добавляет атрибут list вместе с datalist: он разобран в уроке «Автозаполнение в HTML: тег datalist». Поле вне формы привязывает атрибут form у поля. Остальные атрибуты собраны в таблице.

HTML
<input name="a" value="Кот" readonly>
<input name="b" value="Кот" disabled>
<input name="c" placeholder="Кличка">

Пример: readonly, disabled и placeholder

Результат

Выберите запись: под результатом фокус, данные формы, проверка и совпадение с :read-only.

В таблице атрибуты input и типы, для которых они действуют. Устаревший align отмечен отдельно.

АтрибутСтатусЧто делает и для каких типовПример записи
typeактуаленВид поля, 22 значенияtype="date"
nameактуаленНазвание значения в отправке. Нужно всем типам, которые что-то отправляютname="q"
valueактуаленНачальное значение. У флажка и переключателя значение при отметке, у кнопок надписьvalue="Кот"
checkedактуаленНачальная отметка. Только для checkbox и radiochecked
requiredактуаленОбязательное поле. Не действует для hidden, range, color и кнопокrequired
readonlyактуаленЗапрет правки. Только для текстовых типов, чисел и дат; у флажка не действуетreadonly
disabledактуаленОтключает поле, оно не уходит в отправкуdisabled
placeholderактуаленПодсказка в пустом поле. Для текстовых типов и numberplaceholder="Кличка"
patternактуаленРегулярное выражение для всего значения. Для text, search, tel, url, email, passwordpattern="[a-z]{3}"
minlength, maxlengthактуаленДлина значения. Для текстовых типов, у number не действуютmaxlength="10"
min, max, stepактуаленГраницы и шаг. Для number, range и типов даты и времениmin="1" max="10"
sizeактуаленШирина в символах, по умолчанию 20. Для текстовых типов, у number не действуетsize="10"
multipleактуаленНесколько значений. Для file и emailmultiple
acceptактуаленТипы файлов для окна выбора. Только для fileaccept=".png"
autocompleteактуаленПодсказки браузера: off, email, new-password и другиеautocomplete="email"
autofocusактуаленПереводит фокус при загрузке страницы. На странице нужен только одному полюautofocus
inputmodeактуаленВид экранной клавиатуры: numeric, decimal, email и другиеinputmode="numeric"
listактуаленПривязка к datalist по idlist="cities"
formактуаленПривязка к форме по id, если поле стоит вне неёform="order"
formaction, formmethod, formenctype, formtarget, formnovalidateактуаленСвои параметры отправки. Только для submit и imageformaction="/draft"
src, alt, width, heightактуаленКартинка и её размер. Только для image; у других типов width не действуетsrc="go.png" alt="Найти"
alignустарелВыравнивание картинки. Сейчас выравнивают в CSSalign="right"

Название поля у input: label, placeholder и доступность

Поле без названия программа чтения с экрана объявляет только как «поле ввода». Название берётся из надписи label, которая обёрнута вокруг поля или связана через for и id, из aria-label или из title. Если ничего этого нет, запасным названием служит placeholder. Полагаться на него не стоит: подсказка исчезает при вводе. Надпись label заодно увеличивает область нажатия. Подробности есть в уроке «label, placeholder и доступность форм». Роль поля зависит от типа: search даёт searchbox, number даёт spinbutton, range даёт slider, кнопочные типы дают button, а hidden в дереве доступности отсутствует.

HTML
<label for="mail">Почта</label>
<input id="mail" name="mail" type="email">

Пример: откуда берётся название поля

Результат

Выберите запись: под результатом откуда браузер взял название поля.

CSS для input: размеры, состояния и :invalid

У текстовых типов, кроме search, по умолчанию box-sizing равен content-box: ширина в 20 символов не включает рамку и поля, поэтому поле шириной 100% вылезает за контейнер. В CSS поле выбирают по состояниям: :placeholder-shown для пустого поля с подсказкой, :invalid и :valid для проверки, :checked для флажка, :read-only для запрещённой правки. Псевдокласс :read-only совпадает и у disabled, и у флажка, и у обычных блоков. Цвет флажка и ползунка меняет accent-color. Размеры текстовых полей считаются так только на странице с doctype.

CSS
input:invalid { border-color: #d33; }
input:placeholder-shown { background: #fff1ea; }
input { accent-color: #1c9e93; }

Пример: размеры и состояния

Результат

Выберите правило и введите текст в поле: под результатом вычисленные значения и совпавшие псевдоклассы.

Тег input и JavaScript: value, checked, события input и change

Скрипт читает текст из value, состояние флажка из checked, список файлов из files, число из valueAsNumber. Событие input срабатывает на каждое изменение: букву, стрелку, перетаскивание ползунка. Событие change у текстового поля срабатывает при потере фокуса после правки, а у флажка сразу. Запись value из скрипта событий не вызывает, поэтому после неё событие вызывают вручную.

JavaScript
const field = document.querySelector("input");
field.addEventListener("input", () => {
  console.log(field.value);
});

Пример: когда срабатывают события

Результат

Выберите тип и работайте с полем: под результатом свойства и журнал событий.

Вопросы про тег input: отличие от других полей и смена type

Поле ввода легко принять за соседние элементы, а смена его типа на лету меняет поведение: чем input отличается от соседних элементов и что случается при смене типа.

Чем input отличается от textarea, select и button?

Поле input однострочное: перенос строки в значении пропадает. Элемент textarea хранит многострочный текст, а select позволяет выбрать только то, что есть в списке, и сбрасывает неподходящее значение. Кнопка button содержит разметку, а у input надпись только в value. Сравнение этих элементов есть в уроке «select, textarea и checkbox/radio».

HTML
<input>
<textarea></textarea>
<select>
  <option>1</option>
  <option>2</option>
</select>

Пример: одно значение в разные элементы

Результат

Выберите элемент: скрипт записывает строку с переносом, под результатом то, что получилось.

Что будет, если сменить type скриптом?

Значение остаётся, если подходит новому типу. У number, date, range и color неподходящее значение очищается или заменяется значением по умолчанию, а при возврате к text прежний текст не возвращается. Остальные текстовые типы значение сохраняют.

JavaScript
input.value = "abc";
input.type = "number";
input.type = "text";

Пример: что происходит со значением при смене type

Результат

Выберите тип: под результатом значение до смены, после смены и после возврата к text.

Частые ошибки с тегом input

Ошибки с input в основном про забытый name и неверный выбор типа.

ОшибкаЧто происходитКак исправить
Записан закрывающий тег </input>Браузер его отбрасывает, а текст внутри остаётся рядом с полемЗаписать только <input>
У поля нет nameПоле видно, но в отправку не входитЗаписать <input name="q">
Вместо label записан только placeholderПодсказка пропадает при вводе, названия у поля нетДобавить <label for="id">
Телефон или индекс в type="number"Появляются стрелки, значение проверяется как числоЗаписать type="tel" или type="text" с inputmode="numeric"
У радиокнопок разные nameГруппы нет, можно отметить все пунктыЗаписать одинаковый name
Скрипт записывает value и ждёт проверки maxlengthДлинное значение остаётся, ошибки нетПроверять длину в скрипте или вызвать проверку вручную
Текст сбрасывают через setAttribute("value", "...")После ввода пользователя текст на экране не меняетсяЗаписать input.value = "..."
Тип меняют с text на number и обратноПрежний текст пропадает без возвратаХранить значение в переменной
Флажок блокируют через readonlyКлик по-прежнему меняет отметкуИспользовать disabled или скрытое поле hidden
Категория
Поделиться в социальных сетях

Отправить комментарий

0 Комментарии

Отправить комментарий (0)

#buttons=(Хорошо) #days=(20)

Мы используем файлы cookie для улучшения работы сайта. Подробнее
Хорошо
×