Формы в HTML

В процессе навигации по сайтам пользователь, в основном, только щёлкает по ссылкам чтобы перемещаться по веб-страницам.

Но понятно, что пользователю иногда требуется обеспечить собственные поля ввода. Эти виды взаимодействия включают в себя:

  • регистрацию и вход на сайтах;
  • ввод личной информации (имя, адрес, данные кредитной карты и др.);
  • фильтрацию контента (с помощью выпадающих списков, флажков и др.);
  • выполнение поиска;
  • загрузку файлов.

Чтобы приспособиться к этим потребностям, HTML предлагает интерактивные элементы управления формы:

  • текстовые поля (для одной или нескольких строк);
  • переключатели;
  • флажки;
  • выпадающие списки;
  • виджеты для загрузки;
  • кнопки отправки.

Эти элементы управления задействуют разные теги HTML, но большинство из них использует тег <input>. Поскольку это самозакрывающий элемент, тип поля определяется его атрибутом type:

<!-- Текстовое поле -->
<input type="text">
<!-- Флажок -->
<input type="checkbox">
<!-- Переключатель -->
<input type="radio">

Элемент <form>

<form> является блочным элементом, который определяет интерактивную часть веб-страницы. Как результат, все элементы управления (такие как <input>, <textarea> или <button>) должны находиться внутри элемента <form>.

Два атрибута HTML необходимы:

  • action содержит адрес, который определяет, куда будет отправлена информация формы;
  • method может быть либо GET, либо POST и определяет, как будет отправлена информация формы.

Как правило, информация формы посылается на сервер. Как эти данные затем будут обработаны выходит за рамки данного руководства.

Подумайте о форме как о наборе элементов управления, которые работают вместе, чтобы выполнить одну операцию. Если вы написали форму входа на сайт, у вас могло быть три поля:

  • поле для электронной почты <input type="email">
  • поле для пароля <input type="password">
  • кнопка отправки <input type="submit">

Эти три элемента HTML будут заключены внутри одной формы <form action="/login" method="POST">.

Вы можете аналогично добавить форму регистрации на той же HTML-странице, в отдельном элементе <form>.

Текстовые поля

Почти всем формам требуется текстовый ввод от пользователей, чтобы ввести своё имя, адрес электронной почты, пароль, адрес и др. Текстовые поля формы приходят в разных вариантах.

Текст <input type="text"> Допускает любой тип символов
Email <input type="email"> Может показывать предупреждение, если введён неверный email
Пароль <input type="password"> Символы показываются как точки
Число <input type="number"> Могут быть использованы клавиши вверх/вниз
Телефон <input type="tel"> Может сработать автозаполнение
Многострочный текст <textarea></textarea> Может быть изменён размер поля

Хотя эти поля очень похожи и позволяют пользователям вводить текст любого рода (даже неправильный), их тип обеспечивает специфическую семантику для ввода, определяя, какую информацию поле должно содержать.

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

К примеру, поле для пароля показывает точки вместо символов. А поле для чисел позволяет увеличивать/уменьшать значение с помощью клавиш вверх и вниз.

placeholder

Текстовые поля могут отображать подсказывающий текст, который исчезнет, как только будет введён некоторый текст.

<input type="text" placeholder="Введите своё имя">

Если вы начинаете набирать что-то, то увидите как текст «Введите своё имя» исчезнет.

<label>

Так как элементы формы сами по себе не очень описательны, им, как правило, предшествует текстовая метка.

<label>Email</label>
<input type="email">

В то время как placeholder уже обеспечивает некоторую подсказку о том, какое ожидается содержание, метки имеют преимущество оставаясь видимыми в любое время и могут использоваться наряду с другими типами элементов формы, таких как флажки или переключатели.

Хотя вы можете применять короткие абзацы для описания элементов формы, использование <label> является семантически более правильным, потому что они существуют только в формах. <label> также может быть связан с определённым элементом формы с помощью атрибута for, соответствующему значению id у поля.

<label for="first_name">Имя</label>
<input id="first_name" type="text">

При щелчке по метке фокус переходит к текстовому полю и помещает курсор внутрь него. Пока эта связка кажется бесполезной, но пригодится с флажками и переключателями.

Флажки

Флажки — это элементы формы, которые имеют только два состояния: включено или выключено. Они в основном позволяют пользователю сказать: «Да» или «Нет» для чего-то.

<input type="checkbox"> Запомнить меня

Поскольку может оказаться сложно щёлкнуть по небольшому флажку, рекомендуется поместить флажок и его описание внутрь <label>.

<label>
  <input type="checkbox"> Я согласен с условиями
</label>

Вы можете щёлкнуть по тексту «Я согласен с условиями» чтобы переключить флажок.

По умолчанию флажок выключен. Вы можете пометить его включенным, просто используя атрибут checked.

<label>
  <input type="checkbox" checked> Использовать мой платёжный адрес
</label>

Переключатели

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

Для работы этого элемента формы, ваш HTML-код должен сгруппировать список переключателей вместе. Это достигается с помощью одного и того же значения для атрибута name:

<label>Семейное положение</label>
<label>
  <input type="radio" name="status">
  Холост
</label>
<label>
  <input type="radio" name="status">
  Женат
</label>
<label>
  <input type="radio" name="status">
  Разведён
</label>
<label>
  <input type="radio" name="status">
  Вдовец
</label>

Поскольку все переключатели используют одинаковое значение атрибута name (в данном случае значение status), выбор одного из вариантов отменит все остальные. Переключатели являются взаимоисключающими.

Разница между переключателями и флажками

Хотя флажок существует сам по себе, переключатели могут появляться только в виде списка (что означает, по меньшей мере два варианта).

Кроме того, щелчок по флажку является произвольным, в то время как выбор одного из переключателей является обязательным. Вот почему невозможно выключить переключатель, если выбрать ближайший вариант. В конце концов, всегда выбирается один из переключателей.

Выпадающие меню

Если количество вариантов для выбора занимает слишком много места, вы можете воспользоваться выпадающими меню <select>.

Они работают подобно переключателям, отличается только компоновка.

<select>
  <option>Январь</option>
  <option>Февраль</option>
  <option>Март</option>
  <option>Апрель</option>
  <option>Май</option>
  <option>Июнь</option>
  <option>Июль</option>
  <option>Август</option>
  <option>Сентябрь</option>
  <option>Октябрь</option>
  <option>Ноябрь</option>
  <option>Декабрь</option>
</select>

Множественный выбор из выпадающего меню

Если добавить атрибут multiple, вы можете предоставить возможность выбрать несколько вариантов.

<label>Какими браузерами вы пользуетесь?</label>
<select multiple>
  <option>Google Chrome</option>
  <option>Internet Explorer</option>
  <option>Mozilla Firefox</option>
  <option>Opera</option>
  <option>Safari</option>
</select>

Выберите несколько вариантов посредством удержания Ctrl (или ⌘) и щелчка. Это может быть хорошей альтернативой применению несколько флажков в строке.

Пример: полная форма регистрации

<form action="/signup" method="POST">
  <p>
    <label>Обращение</label>
    <label>
      <input type="radio" name="title" value="mr">
      Г-н
    </label>
    <label>
      <input type="radio" name="title" value="mrs">
      Г-жа
    </label>
  </p>
  <p>
    <label>Имя</label>
    <input type="text" name="first_name">
  </p>
  <p>
    <label>Фамилия</label>
    <input type="text" name="last_name">
  </p>
  <p>
    <label>Email</label>
    <input type="email" name="email">
  </p>
  <p>
    <label>Телефон</label>
    <input type="tel" name="phone">
  </p>
  <p>
    <label>Пароль</label>
    <input type="password" name="password">
  </p>
  <p>
    <label>Подтвердите пароль</label>
    <input type="password" name="password_confirm">
  </p>
  <p>
    <label>Страна</label>
    <select name="country">
      <option>Канада</option>
      <option>Франция</option>
      <option>Германия</option>
      <option>Италия</option>
      <option>Япония</option>
      <option>Россия</option>
      <option>Великобритания</option>
      <option>США</option>
    </select>
  </p>
  <p>
    <label>
      <input type="checkbox" name="terms">
      Я согласен с <a href="/terms">условиями использования</a>
    </label>
  </p>
  <p>
    <button>
      Зарегистрироваться
    </button>
  </p>
</form>

Также доступны и другие элементы форм, но мы рассмотрели наиболее используемые.

Перейти к заданиям

Автор: Джереми Томас
Последнее изменение: 13.08.2017