Полное руководство по элементам HTML-формы
Создание HTML-формы – неотъемлемая часть сайта и важный навык веб-разработчиков. Используйте это руководство для изучения элементов HTML-форм.
Введение
HTML-формы требуются для сбора данных от посетителей сайта. Например, при регистрации на Uber, Netflix или Facebook пользователь вводит свое имя, почту и пароль.
Примечание: В примерах ниже уже заданы CSS стили, поэтому они отличаются от того, что получится у вас. CSS файлы можно скачать отсюда:
Элемент Form
Элемент Form (<form></form>) оборачивает все элементы внутри HTML-формы.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Sign Up Form</title> <link rel="stylesheet" href="css/normalize.css"> <link href="https://fonts.googleapis.com/css?family=Lato:300,400,700" rel="stylesheet"> <link rel="stylesheet" href="css/main.css"> </head> <body> <form action="index.html" method="post"> </form> </body> </html>
Атрибуты:
- action – это веб-адрес (URL) программы, которая обрабатывает данные формы.
- Method – это HTTP метод, который используется браузером для отправки формы.
- Возможные значения: POST или GET. POST – отправляет данные формы на сервер.
GET – данные отправляются внутри URL, параметры разделяются знаком «?».
Примечание: Нельзя создать форму внутри формы. То есть использование элемента <form> внутри другого элемента <form> недопустимо.
Элемент Input
Это самый популярный элемент HTML-формы. Используется для создания текстовых полей, в которые пользователь вводит информацию (например: пароль, адрес почты и т. д.).
Создадим текстовое поле, в которое пользователь сможет ввести свое имя.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Sign Up Form</title> <link rel="stylesheet" href="css/normalize.css"> <link href="https://fonts.googleapis.com/css?family=Lato:300,400,700" rel="stylesheet"> <link rel="stylesheet" href="css/main.css"> </head> <body> <form action="index.html" method="post"> <input type="text" id="name" name="student_name"> </form> </body> </html>
В примере выше над тегом input были добавлены три атрибута.
type
Указывает на тип ввода. При значении text пользователь должен вводить текстовые данные. У этого атрибута имеется множество значений, например, email, tel (для номера телефона), password и т. д.
Пример: при попытке зайти в свой профиль на сайте (Amazon/Netflix) необходимо указать почту и пароль. Для этих целей используется элемент input. Атрибуты type будут иметь значения email и password соответственно.
id
Это не обязательное, но весьма полезное поле HTML-формы. Например, для определения элементов в CSS/JavaScript. Идентификаторы используются для сопоставления меток с нужными элементами управления формой.
name
Обязательный атрибут. При передаче HTML-формы в серверный код сервер должен интерпретировать данные из формы и правильно их обработать.
placeholder
Атрибут подсказывает пользователю, что именно необходимо ввести в поле ввода HTML-формы. Исчезает, как только пользователь начинает печатать в поле.
Примечание: Использование разных значений в атрибуте type выводит разный результат:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Sign Up Form</title> <link rel="stylesheet" href="css/normalize.css"> <link href="https://fonts.googleapis.com/css?family=Lato:300,400,700" rel="stylesheet"> <link rel="stylesheet" href="css/main.css"> </head> <body> <form action="index.html" method="post"> <input type="text" id="name" name="student_name"> <input type="email" id="mail" name="student_email"> <input type="password" id="password" name="student_password"> </form> </body> </html>
Элементы input без placeholder:
Элементы input с placeholder:
Элемент textarea
Иногда одной строки текста бывает недостаточно, а простой элемент input совершенно не подходит. Например, на некоторых сайтах добавляются формы, в которых пользователи оставляют свои отзывы и задают вопросы. В таких случаях лучше прибегнуть к элементу textarea.
Элемент <textarea> не является самозакрывающимся тегом, поэтому требует открывающей и закрывающей скобки.
Атрибуты:
- id – см. <input/>.
- name – см. <input/>.
- cols – задает видимую ширину текстовой области.
- rows – задает видимое количество строк в текстовой области.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Sign Up Form</title> <link rel="stylesheet" href="css/normalize.css"> <link href="https://fonts.googleapis.com/css?family=Lato:300,400,700" rel="stylesheet"> <link rel="stylesheet" href="css/main.css"> </head> <body> <form action="index.html" method="post"> <textarea id="bio" name="student_bio"></textarea> </form> </body> </html>
Примечание: В большинстве браузеров можно изменять размер элемента.
Элемент button
Один из важнейших элементов HTML-формы. Без кнопки вы не сможете отправить и обработать данные формы на сервере.
В элементе задается атрибут type, который может принимать три разных значения: submit, reset и button.
Атрибуты:
- type=”reset” – при нажатии очищает все данные формы.
- type=”button” – в нем нет какого-то стандартного поведения. В основном используется в JavaScript для программирования настраиваемого поведения.
- type=”submit” – стандартное поведение кнопки «Отправить», т. е. передача данных на сервер.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Sign Up Form</title> <link rel="stylesheet" href="css/normalize.css"> <link href="https://fonts.googleapis.com/css?family=Lato:300,400,700" rel="stylesheet"> <link rel="stylesheet" href="css/main.css"> </head> <body> <form action="index.html" method="post"> <input type="text" id="name" name="student_name"> <input type="email" id="mail" name="student_email"> <input type="password" id="password" name="student_password"> <textarea id="bio" name="student_bio"></textarea> <button type="submit">Submit</button> </form> </body> </html>
Элемент label
Пока что пользователь не сможет понять, для чего нужен каждый элемент HTML-формы. Вы не можете предугадать, куда вводить адрес почты, а куда – пароль. Формы смотрятся недоделанными и непонятными.
Каждую строку HTML-формы можно отметить элементом label.
Наиболее популярным атрибутом label является for.
Атрибуты:
for – связывает метку строки с определенным элементом формы. Соответствие проверяется по ID. Значением атрибута ID для элемента input в примере выше является email. Оно совпадает со значением атрибута for для элемента label. Таким образом, оба элемента связаны.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Sign Up Form</title> <link rel="stylesheet" href="css/normalize.css"> <link href="https://fonts.googleapis.com/css?family=Lato:300,400,700" rel="stylesheet"> <link rel="stylesheet" href="css/main.css"> </head> <body> <form action="index.html" method="post"> <label for="name">Name</label> <input type="text" id="name" name="student_name"> <label for="mail">Email</label> <input type="email" id="mail" name="student_email"> <label for="password">Password</label> <input type="password" id="password" name="student_password"> <label for="bio">Biography</label> <textarea id="bio" name="student_bio"></textarea> <button type="submit">Submit</button> </form> </body> </html>
Примечание: если навести мышкой на метку (название строки), то активируется поле ввода, связанное с данной меткой Это стандартное поведение элемента.
Меню select
Иногда требуется создание HTML-формы, в которой пользователь будет выбирать определенные значения.
Для экономии места в интерфейсе рекомендуется выносить все списки длиннее 4-5 пунктов в меню select.
Пример: форма для поступления в университет, в которой студенты выбирают нужный профиль подготовки.
Элементу <select> нужны открывающие и закрывающие теги.
<select> отображает выпадающее меню с заданными значениями. Сам по себе элемент select не выполняет никаких действий, т.к. ему нужны дополнительные теги (элементы option). Здесь можно провести параллель с тегом <ul>, которому необходимы элементы <li>.
Атрибуты:
- name – см. <input/>.
- <option> – вариант выбора из меню select. Использует атрибут value.
value – при отправке формы на сервер каждый элемент обладает определенным значением (value) для текстовых полей и областей. Иными словами, value – это все, что пользователь указывает в поле. Но при создании меню select с готовыми опциями необходимо заранее определять в них value.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Sign Up Form</title> <link rel="stylesheet" href="css/normalize.css"> <link href="https://fonts.googleapis.com/css?family=Lato:300,400,700" rel="stylesheet"> <link rel="stylesheet" href="css/main.css"> </head> <body> <form action="index.html" method="post"> <h2>Your basic info</h2> <label for="name">Name</label> <input type="text" id="name" name="student_name"> <label for="mail">Email</label> <input type="email" id="mail" name="student_email"> <label for="password">Password</label> <input type="password" id="password" name="student_password"> <h2>Your profile</h2> <label for="bio">Biography</label> <textarea id="bio" name="student_bio"></textarea> <label for="courses">Select Courses</label> <select id="courses" name="student_courses"> <option value="computer_engineering">Computer Science Engineering</option> <option value="slectrical_engineering">Electrical Engineering</option> <option value="mechanical_engineering">Mechanical Engineering</option> <option value="civil_engineering">Civil Engineering</option> <option value="chemical_engineering">Chemical Engineering</option> </select> <button type="submit">Submit</button> </form> </body> </html>
Для формы выбора курса также задается элемент label. Кроме того, списки можно упорядочить по логическим группам. Для этих целей используется элемент <optgroup>.
Атрибуты:
label: – название группы опций (вариантов). В примере ниже варианты выбора делятся на две группы с меткой Engineering (Проектирование) и Management (Управление).
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Sign Up Form</title> <link rel="stylesheet" href="css/normalize.css"> <link href="https://fonts.googleapis.com/css?family=Lato:300,400,700" rel="stylesheet"> <link rel="stylesheet" href="css/main.css"> </head> <body> <form action="index.html" method="post"> <h2>Your basic info</h2> <label for="name">Name</label> <input type="text" id="name" name="student_name"> <label for="mail">Email</label> <input type="email" id="mail" name="student_email"> <label for="password">Password</label> <input type="password" id="password" name="student_password"> <h2>Your profile</h2> <label for="bio">Biography</label> <textarea id="bio" name="student_bio"></textarea> <label for="courses">Select Courses</label> <label for="courses">Select Courses</label> <select id="courses" name="student_courses"> <optgroup label="Engineering"> <option value="computer_engineering">Computer Science</option> <option value="electrical_engineering">Electrical</option> <option value="mechanical_engineering">Mechanical</option> <option value="chemical_engineering">Chemical</option> <option value="civil_engineering">Civil</option> </optgroup> <optgroup label="Management"> <option value="finance_management">Finance Management</option> <option value="technology_management">Technology</option> <option value="marketing_management">Marketing</option> <option value="business_administration">Business</option> </optgroup> </select> <button type="submit">Submit</button> </form> </body> </html>
Радиокнопки
Меню select – это идеальное решение для HTML-формы с объемным списком. Однако при наличии 5 и менее вариантов выбора, лучше реализовать их через радиокнопки.
В отличие от меню select, радиокнопки (radio button) сразу показывают все доступные опции. Пользователь по-прежнему может выбрать только один вариант.
Атрибуты:
- name – см. <input/>.
- value – определение значений заданных вариантов.
Примечание: При выделении одного варианта и попытке выделения другого первый выбор удалится. Это реализуется благодаря атрибуту name, в котором прописана принадлежность этих двух радиокнопок к одной группе.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Sign Up Form</title> <link rel="stylesheet" href="css/normalize.css"> <link href="https://fonts.googleapis.com/css?family=Lato:300,400,700" rel="stylesheet"> <link rel="stylesheet" href="css/main.css"> </head> <body> <form action="index.html" method="post"> <h2>Your basic info</h2> <label for="name">Name</label> <input type="text" id="name" name="student_name"> <label for="mail">Email</label> <input type="email" id="mail" name="student_email"> <label for="password">Password</label> <input type="password" id="password" name="student_password"> <label>Age:</label> <input type="radio" id="under_16" value="under_16" name="user_age"><label for="under_16" class="light">Under 16</label><br> <input type="radio" id="over_16" value="over_16" name="user_age"><label for="over_16" class="light">16 or Older</label> <h2>Your profile</h2> <label for="bio">Biography</label> <textarea id="bio" name="student_bio"></textarea> <label for="courses">Select Courses</label> <select id="courses" name="student_courses"> <optgroup label="Engineering"> <option value="computer_engineering">Computer Science Engineering</option> <option value="slectrical_engineering">Electrical Engineering</option> <option value="mechanical_engineering">Mechanical Engineering</option> <option value="civil_engineering">Civil Engineering</option> <option value="chemical_engineering">Chemical Engineering</option> </optgroup> <optgroup label="Management"> <option value="finance_management">Finance Management</option> <option value="technology_management">Technology Management</option> <option value="marketing_management">Marketing Management</option> <option value="business_administration">Business Administration</option> </optgroup> </select> <button type="submit">Submit</button> </form> </body> </html>
Примечание: Внутри одной группы радиокнопок атрибут name должен быть одинаковым.
Чекбоксы
Иногда необходимо создать некую группу различных вариантов, из которых пользователь сможет выбрать несколько. С этим помогут чекбоксы.
Атрибуты:
- name – см. <input/>.
- value – определение значений заданных вариантов.
- checked – отметка о предвыборе данного варианта, т.к. по умолчанию у чекбоксов нет выбранного значения. Важно помнить, что это логический атрибут (boolean).
<input type="checkbox" checked id="name" value="abhishek" name="user_name" />
В примере ниже каждый отдельный вариант использовался с метками (элементом label). Для объединения чекбоксов и меток внутри HTML-формы использовался атрибут for для label и атрибут id для checkbox.
Примечание: поскольку кликать по маленьким чекбоксам неудобно, лучше оборачивать элемент <label> вокруг каждого чекбокса. Тогда при клике в области метки выделение чекбокса будет добавляться или сниматься. Однако в примере ниже этого не сделано.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Sign Up Form</title> <link rel="stylesheet" href="css/normalize.css"> <link href="https://fonts.googleapis.com/css?family=Lato:300,400,700" rel="stylesheet"> <link rel="stylesheet" href="css/main.css"> </head> <body> <form action="index.html" method="post"> <h2>Your basic info</h2> <label for="name">Name</label> <input type="text" id="name" name="student_name"> <label for="mail">Email</label> <input type="email" id="mail" name="student_email"> <label for="password">Password</label> <input type="password" id="password" name="student_password"> <label>Age:</label> <input type="radio" id="under_16" value="under_16" name="user_age"><label for="under_16" class="light">Under 16</label><br> <input type="radio" id="over_16" value="over_16" name="user_age"><label for="over_16" class="light">16 or Older</label> <h2>Your profile</h2> <label for="bio">Biography</label> <textarea id="bio" name="student_bio"></textarea> <label for="courses">Select Courses</label> <select id="courses" name="student_courses"> <optgroup label="Engineering"> <option value="computer_engineering">Computer Science Engineering</option> <option value="slectrical_engineering">Electrical Engineering</option> <option value="mechanical_engineering">Mechanical Engineering</option> <option value="civil_engineering">Civil Engineering</option> <option value="chemical_engineering">Chemical Engineering</option> </optgroup> <optgroup label="Management"> <option value="finance_management">Finance Management</option> <option value="technology_management">Technology Management</option> <option value="marketing_management">Marketing Management</option> <option value="business_administration">Business Administration</option> </optgroup> </select> <label>Interests:</label> <input type="checkbox" id="engineering" value="interest_engineering" name="user_interest"><label class="light" for="engineering">Engineering</label><br> <input type="checkbox" id="business" value="interest_business" name="user_interest"><label class="light" for="business">Business</label><br> <input type="checkbox" id="law" value="interest_law" name="user_interest"><label class="light" for="law">Law</label> <button type="submit">Submit</button> </form> </body> </html>
Отличия чекбоксов от радиокнопок HTML-формы
Чекбокс может существовать сам по себе. Радикнопки появляются только в качестве группы (минимум 2 кнопки).
В отличие от радиокнопки выбор чекбокса не является обязательным.
Конечный результат
В статье было представлено пошаговое руководство по созданию HTML-формы. Не старайтесь запомнить все и сразу – ни один разработчик не сможет назвать каждый атрибут или элемент. Гораздо важнее научиться ориентироваться в документации.
Вы можете добавить в эти примеры CSS и создать собственные формы.
Перевод статьи Abhishek Jakhar: A step-by-step guide to getting started with HTML forms