Как сделать поля в браузере
В HTML для создания форм используются теги группы form. К ним относятся:
-
- контейнер формы; - элементы формы (поля) различных типов; - кликабельная кнопка; - выпадающий список, список с множественным выбором; - пункт списка; - группа пунктов; - список предопределенных вариантов; - текстовая область; - подпись, метка поля; - группа полей; - название группы полей; - результат вычислений.
Каждому из этих тегов посвящена отдельная страница в нашем справочнике. Перейти на нее вы можете, нажав по названию тега.
На этой странице описана практика создания и работы с HTML формами с примером исходного кода и описанием на русском языке.
Создание формы в HTML
Для того чтобы создать простую HTML форму, нужно поместить в код страницы тег <form> и разместить внутри него элементы формы.
Тег <form> является корневым элементом HTML формы. Все элементы формы должны находиться внутри тега <form> , либо быть связанными с формой при помощи атрибута form , содержащего идентификатор формы (значение атрибута id тега <form> ).
Элементы формы (другое название - поля) формируются с помощью тегов группы form. Основные типы элементов описаны ниже на этой странице. Подробное описание всех типов полей форм находится на страницах тегов соответствующих элементов.
Пример HTML формы обратной связи
HTML код формы обратной связи
Рассмотрим подробно код формы.
Атрибут action содержит URL обработчика формы - по этому адресу будет отправлена форма после наступления события submit (submit - событие отправки формы).
Внутри тега <form> , помимо текстовых элементов, находятся элементы формы: <select> - список, <input> типов text и email - поля ввода, <textarea> - текстовая область и <input type="submit"> - кнопка отправки формы.
Каждый элемент cодержит атрибут name . При отправке формы, значения введенные пользователем будут переданы в переменных с именами указанными в этом атрибуте. Атрибут type определяет тип элемента <input> . Атрибут required делает элемент обязательными для заполнения. Форма не будет отправлена, пока пользователь не заполнит все обязательные элементы.
Стилевое оформление формы
Для оформления формы обратной связи, приведенной выше, были использованы несколько стилей CSS. Оформление не влияет на работу формы, однако, если вы хотите чтобы ваша форма выглядела также как форма из примера, воспользуйтесь CSS правилами, приведенными ниже.
Код CSS для базового оформления HTML формы обратной связи из примера выше:
Элементы (поля) формы html. Основные типы полей
В таблице ниже представлены основные типы элементов формы (полей). Подробную информацию о каждом элементе вы можете просмотреть на отдельной странице тега.
По умолчанию текстовое поле может принимать любые текстовые значение. Дополнительные ограничения могут быть установлены в теге (атрибут pattern), либо с помощью JavaScript.
С помощью тега <datalist> к полю можно добавить список предопределенных вариантов.
Браузеры обычно отображают возле поля календарь, с помощью которого можно заполнить поле.
Существует несколько типов полей, содержащих данные о дате и времени:
- date - дата (число, месяц, год);
- datetime-local - дата и время (число, месяц, год, часы, минуты);
- month - месяц конкретного года (например: январь, 2004г);
- week - неделя конкретного года (например: неделя 32, 2001г).
Поле для ввода пароля:
В поле типа password введенное значение будет заменено символьной маской.
Поле для ввода чисел:
В поля из этой группы можно вводить только подходящее к типу поля содержимое.
Поля с указанным типом содержимого:
- email - поле для ввода адреса электронной почты;
- number - поле для ввода чисел;
- password - поле для ввода пароля;
- search - поле для ввода поискового запроса;
- tel - поле для ввода номера телефона;
- url - поле для ввода URL адреса.
Текстовая область может принимать в виде значения многострочный текст.
Чек-бокс представляет собой поле, в котором можно сделать отметку.
Элемент "переключатель" позволяет выбрать один из доступных вариантов.
При клике на список пользователю откроются доступные для выбора варианты.
Пользователь может выбрать сразу несколько вариантов из этого списка.
С помощью этого элемента пользователь может прикрепить к форме файл.
Для создания кликабельной кнопки можно использовать тег <input> либо тег <button>.
Отличие в возможности формировать название кнопки, сделанной тегом <button>, с помощью HTML тегов.
Типы кнопок (определяются атрибутом type):
- button - простая кнопка. Действие, которое будет выполнено при нажатии кнопки, определяется через JavaScript;
- submit - кнопка отправки формы;
- reset - кнопка очистки полей формы.
Обработка HTML формы на сервере
После отправки формы данные передаются на сервер в виде параметров запроса.
Дальнейшая обработка формы осуществляется с помощью программного кода обработчика, указанного в атрибуте action формы.
Для создания обработчика понадобится один из доступных языков программирования. Распространенным вариантом является использование PHP обработчиков.
В случае использования PHP обработчика данные формы будут доступны в суперглобальных массивах $_GET и $_POST . Например, данные поля с именем "message", отправленные методом POST, будут доступны как $_POST['message'] .
Работа с формами на сервере - это отдельная обширная тема. Об обработке HTML форм на сервере читайте в справочнике по выбранному языку программирования.
Ниже представлен простейший PHP обработчик для формы обратной связи, приведенной выше. Данный обработчик отправляет данные формы на указанный email.
В этой статье рассмотрим различные варианты стилизации текстовых полей HTML-форм. Сначала создадим базовый вариант оформления input, а затем множество других, дополняя каждый из них небольшим количеством CSS.
Введение
Веб-формы являются неотъемлемой частью многих веб-сайтов. Они позволяют пользователю ввести те или иные данные, которые затем отправляются на сервер или обрабатываются на стороне клиента, например, для изменения интерфейса.
Веб-формы также часто называют HTML-формами . Их проектирование осуществляется с помощью элементов управления форм (текстовых полей, выпадающих списков, кнопок, чекбоксов и т.д.) и некоторых дополнительных элементов, которые используются для придание форме определённой структуры.
Стилизация формы выполняется через CSS. В этом руководстве остановимся и подробно рассмотрим различные варианты оформления её текстовых полей .
Исходные коды примеров расположены на GitHub в папке text-field проекта «ui-components».
Нормализация стилей
1. Настройка box-sizing .
Обычно хорошей практикой считается для всех элементов включая псевдоэлементы установить box-sizing: border-box :
В этом случае браузер при рассчитывании ширины и высоты элементов будет включать в них поля (padding) и границы (border). Как правило, это сильно упрощает работу с размерами элементов, и избавляет нас от множества проблем при размещении контента.
2. Нормализация стилей <input> .
Для того чтобы <input> в разных браузерах отображался как можно более одинаково необходимо добавить следующее:
Базовый вариант оформления input
Для удобного добавления к элементам стилей создадим следующую HTML-разметку:
Т.е. добавим к <input> с type="text" класс text-field__input , к <label> – text-field__label , а затем обернём их в элемент <div> с классом text-field .
Теперь напишем стили для этих элементов. А также сразу включим в них стили для нормализации, чтобы не добавлять их отдельно:
Примененные CSS свойства к элементу <input> , и то, что они делают:
В результате получили следующее оформление:
Стилизуем плейсхолдер . По умолчанию плейсхолдер отображается полупрозрачным или светло-серым цветом. Получить его можно с помощью ::placeholder . Оформим его следующим образом:
Стили для <input> в состоянии фокуса (получить это состояние можно с помощью псевдокласса :focus ):
Оформление <input> , когда он находится в состоянии disabled и readonly :
Этот набор стилей будет у нас отправной точкой для создания других.
input с иконкой
Рассмотрим пример вставки в input иконки с помощью псевдоэлементов.
Для этого дополнительно обернём элемент <input> в <div> с классами text-field__icon text-field__icon_email :
Первый класс ( text-field__icon ) будем использовать для того, чтобы установить относительное позиционирование ( position: relative ). Это действие позволит нам разместить иконку в нужном месте относительно input , используя уже абсолютное позиционирование ( position: absolute ). Второй класс ( text-field__icon_email ) будет определять иконку, которую мы хотим вставить.
Ещё один вариант оформления:
input с активной svg-иконкой
В этом примере поместим в input иконку, на которую можно нажать.
Для этого мы также как и в предыдущем примере обернули <input> в <div >. <div> . Саму svg-иконку обернули в <span> с классом text-field__aicon и поместили рядом с <input> .
Оформление выполнили так:
Ещё пример вставки иконки в input :
input с кнопкой
HTML-разметка input с кнопкой:
Расположение кнопки справа от input выполним с помощью флексов:
input с плавающим label
Разметка input с плавающим label:
Ещё один вариант с «плавающей» меткой:
input со счётчиком символов
Пример в котором под input отображается количество набранных символов и максимальная длина:
Это выполняется посредством следующего кода:
Стили для отображения состояния валидации input
Применить стили в зависимости от состояния поля в CSS можно с помощью специальных псевдоклассов. Например, :valid позволяет выбрать валидные элементы, а :invalid - не валидные.
Но, если вы хотите контролировать этот процесс и добавлять стили с помощью JavaScript, то тогда лучше это делать через классы. Например, использовать класс text-field__input_valid при успешной валидации, а text-field__input_invalid - при не успешной. Их следует добавлять к <input> .
Для <input> с плавающим <label> :
Пример валидации формы с помощью JavaScript
Это первая статья об элементах интерфейса из серии под названием «Шкатулка с секретами». Она посвящена очень простому на первый взгляд элементу, который есть практически на любом сайте и в любом приложении. Он — основа для получения обратной реакции от пользователя. То, как он сделан, сильно влияет на пользовательский опыт. Этот компонент — поле ввода.
Зачем я пишу эту статью? В процессе работы над интерфейсами я пыталась найти информацию о полях ввода и поняла, что это задача не из простых: информации крайне мало, она разбросана по источникам и почти не переведена на русский язык. Поэтому я решила, что такая статья точно будет полезной другим дизайнерам. Она отражает не только мой опыт, но и опыт моей любимой команды.
Input (поле ввода) — базовый компонент интерфейса, предназначенный для ввода небольшого объема текста.
Самое простое поле ввода содержит Label (лейбл или заголовок) и Text field (область для ввода текста). Чтобы пользователям было удобнее работать с полем ввода, базовый комплект может быть сильно расширен — об этом расскажу ниже.
Поле ввода — простой компонент, но он состоит из множества частей. Даже в базовом состоянии вам нужно будет определиться с:
- Лейблом. Его расположением, размером и цветом текста и отступами до других элементов.
- Рамкой поля. Ее толщиной, скруглениями, цветом, заливкой, высотой.
- Текстом в области ввода. Его размером, цветом, отступами.
Эти части создают единое целое, они задают ритм и задействуют все базовые элементы стиля.
На мой взгляд, самое важное при создании поля ввода — продумать все необходимые состояния. Об этом часто забывают: возможно, потому что знания о таких вещах доходят обрывками.
Статичное состояние
Базовое активное состояние поля ввода, когда пользователь с ним не взаимодействует, но может сделать это в любой момент.
Наведение курсором
Нужно только для веб-интерфейсов, где есть мышь или тачпад. Поле ввода может визуально реагировать на это событие. Например, немного менять цвет обводки в области для ввода текста.
Фокус
Это активное состояние поля ввода, когда пользователь с ним взаимодействует — заполняет данные. Фокус появится, если нажать на поле ввода или переключиться на него с помощью клавиатуры. По умолчанию в браузере уже встроен дизайн состояния фокуса, но его можно изменить.
Недоступное поле
Неактивное состояние, когда пользователь не может взаимодействовать с полем. Чаще всего у неактивного поля снижен контраст, а область ввода залита серым.
Ошибка
Создавая доступный интерфейс, вы заботитесь о том, чтобы им мог пользоваться любой человек — независимо от того, какие у него особенности.
Что стоит учитывать дизайнерам:
- У поля ввода обязательно должен быть лейбл. Лучше, если он будет расположен над полем. Нельзя использовать подсказку вместо лейбла: она пропадает при фокусе и не читается вспомогательными программами для озвучивания текста.
- Короткие и информативные тексты для лейблов, подсказок и ошибок.
- Высокая контрастность. Лейбл и текст должны иметь высокий индекс контрастности по WCAG. Также не стоит делать обводку поля ввода слишком светлой.
- Не мельчить. Область поля ввода должна быть не меньше 40 пикселей, а шрифт не меньше 16 кегля.
- Не скрывать важные подсказки под информерами, показывая их только при наведении. Это делает подсказки труднодоступными для некоторых пользователей.
- Ярко выделять состояния ошибки. Еще лучше — кроме цвета использовать иконку, чтобы люди с цветовой слепотой легче её находили.
- Текст ошибки должно быть видно сразу, а не только при фокусе на элемент.
- Как можно реже использовать недоступное для заполнения состояние. И только по самым веским причинам.
С этими знаниями вы сможете грамотно подготовить компонент. Ваша документация должна содержать все необходимые состояния для передачи в разработку.
Кроме базовых элементов, о которых я говорила в начале статьи, у поля ввода может быть большое количество вспомогательных. В статье я не могу охватить все, но постараюсь рассказать о самых распространенных и полезных.
Пример заполнения (placeholder)
Предзаполненный текст внутри поля ввода показывает, что можно написать. Этот текст пропадает при начале ввода, поэтому его нельзя (даже если очень хочется) использовать вместо лейбла.
Подсказка
Дополнительная текстовая строка — самый частый спутник поля ввода. Используется, если нужно дать пользователю больше информации.
Подсказки могут быть примитивными или более сложными по структуре. Сложные варианты встречаются при создании логина или пароля, когда надо учесть много условий: например, может появиться шкала сложности и надежности пароля.
Информер
Маска
Текстовый скелет, который помогает людям понять, в каком формате вводить данные. Часто маску можно встретить на полях для ввода даты, номера карты или телефона. Маска может самостоятельно ставить пробелы, точки или другие символы, чтобы упростить и ускорить процесс заполнения.
Защита данных
Чаще всего защиту делают в виде иконки глаза, при клике на который можно скрыть или показать заполненные данные. Такая иконка почти всегда есть около поля с вводом пароля.
Саджест
Технология автозаполнения поисковой строки работает по статистике самых популярных запросов. Это очень распространенное дополнение, поэтому его можно встретить на сайте любого поисковика. Варианты подтягиваются из базы данных вертикальным списком — пользователь может выбрать что-то из этого списка, а может и не выбирать. После клика на любой пункт открывается новая страница.
Автозаполнение
Очень похоже на саджест, так как по сути у них одна цель. В отличие от саджеста, автозаполнение просто заполняет строку текстом. Показательный пример — автоматическое заполнение полного адреса, когда человек ввел только одну основную часть.
Есть случаи, когда саджест и автозаполнение применяются одновременно.
В этой ситуации при клике на словосочетание откроется новая страница — сработает саджест. Если кликнуть на иконку справа, поле ввода автоматически заполнится — сработает автокомплит.
Есть и другие дополнительные опции для полей ввода: например, виртуальная клавиатура или возможность голосового ввода. Они применяются редко, но бывают крайне полезны в определенных обстоятельствах.
Браузеры научились помогать людям быстрее и проще взаимодействовать с полями ввода. Они могут добавлять различные дополнительные элементы управления внутрь поля. Важно помнить об этом, потому что такие дополнения могут влиять на размер поля ввода и перекрывать его элементы.
Как это работает?
Это зависит от конкретного браузера и даже от его версии. Когда frontend-разработчик делает поле ввода, он может задать ему определенное назначение. Полный список элементов можно посмотреть тут. Есть поля, предназначенные для пароля, даты, телефона, цифр и прочего. Все браузеры реагируют на поля ввода по-разному, внешний вид этих вспомогательных элементов от вас не зависит — только от операционной системы и браузера. В некоторых браузерах на эти элементы можно влиять, в других — нет.
На картинке выше показаны примеры одного и того же поля ввода <input type=”number”> в разных операционных системах и браузерах.
Если в вашем поле ввода уже есть иконка, но для поля установлено назначение, то вы можете наблюдать разные интересные ситуации, например, дублирование.
Это первая статья об элементах интерфейса из серии под названием «Шкатулка с секретами». Она посвящена очень простому на первый взгляд элементу, который есть практически на любом сайте и в любом приложении. Он — основа для получения обратной реакции от пользователя. То, как он сделан, сильно влияет на пользовательский опыт. Этот компонент — поле ввода.
Зачем я пишу эту статью? В процессе работы над интерфейсами я пыталась найти информацию о полях ввода и поняла, что это задача не из простых: информации крайне мало, она разбросана по источникам и почти не переведена на русский язык. Поэтому я решила, что такая статья точно будет полезной другим дизайнерам. Она отражает не только мой опыт, но и опыт моей любимой команды.
Input (поле ввода) — базовый компонент интерфейса, предназначенный для ввода небольшого объема текста.
Самое простое поле ввода содержит Label (лейбл или заголовок) и Text field (область для ввода текста). Чтобы пользователям было удобнее работать с полем ввода, базовый комплект может быть сильно расширен — об этом расскажу ниже.
Поле ввода — простой компонент, но он состоит из множества частей. Даже в базовом состоянии вам нужно будет определиться с:
- Лейблом. Его расположением, размером и цветом текста и отступами до других элементов.
- Рамкой поля. Ее толщиной, скруглениями, цветом, заливкой, высотой.
- Текстом в области ввода. Его размером, цветом, отступами.
Эти части создают единое целое, они задают ритм и задействуют все базовые элементы стиля.
На мой взгляд, самое важное при создании поля ввода — продумать все необходимые состояния. Об этом часто забывают: возможно, потому что знания о таких вещах доходят обрывками.
Статичное состояние
Базовое активное состояние поля ввода, когда пользователь с ним не взаимодействует, но может сделать это в любой момент.
Наведение курсором
Нужно только для веб-интерфейсов, где есть мышь или тачпад. Поле ввода может визуально реагировать на это событие. Например, немного менять цвет обводки в области для ввода текста.
Фокус
Это активное состояние поля ввода, когда пользователь с ним взаимодействует — заполняет данные. Фокус появится, если нажать на поле ввода или переключиться на него с помощью клавиатуры. По умолчанию в браузере уже встроен дизайн состояния фокуса, но его можно изменить.
Недоступное поле
Неактивное состояние, когда пользователь не может взаимодействовать с полем. Чаще всего у неактивного поля снижен контраст, а область ввода залита серым.
Ошибка
Создавая доступный интерфейс, вы заботитесь о том, чтобы им мог пользоваться любой человек — независимо от того, какие у него особенности.
Что стоит учитывать дизайнерам:
- У поля ввода обязательно должен быть лейбл. Лучше, если он будет расположен над полем. Нельзя использовать подсказку вместо лейбла: она пропадает при фокусе и не читается вспомогательными программами для озвучивания текста.
- Короткие и информативные тексты для лейблов, подсказок и ошибок.
- Высокая контрастность. Лейбл и текст должны иметь высокий индекс контрастности по WCAG. Также не стоит делать обводку поля ввода слишком светлой.
- Не мельчить. Область поля ввода должна быть не меньше 40 пикселей, а шрифт не меньше 16 кегля.
- Не скрывать важные подсказки под информерами, показывая их только при наведении. Это делает подсказки труднодоступными для некоторых пользователей.
- Ярко выделять состояния ошибки. Еще лучше — кроме цвета использовать иконку, чтобы люди с цветовой слепотой легче её находили.
- Текст ошибки должно быть видно сразу, а не только при фокусе на элемент.
- Как можно реже использовать недоступное для заполнения состояние. И только по самым веским причинам.
С этими знаниями вы сможете грамотно подготовить компонент. Ваша документация должна содержать все необходимые состояния для передачи в разработку.
Кроме базовых элементов, о которых я говорила в начале статьи, у поля ввода может быть большое количество вспомогательных. В статье я не могу охватить все, но постараюсь рассказать о самых распространенных и полезных.
Пример заполнения (placeholder)
Предзаполненный текст внутри поля ввода показывает, что можно написать. Этот текст пропадает при начале ввода, поэтому его нельзя (даже если очень хочется) использовать вместо лейбла.
Подсказка
Дополнительная текстовая строка — самый частый спутник поля ввода. Используется, если нужно дать пользователю больше информации.
Подсказки могут быть примитивными или более сложными по структуре. Сложные варианты встречаются при создании логина или пароля, когда надо учесть много условий: например, может появиться шкала сложности и надежности пароля.
Информер
Маска
Текстовый скелет, который помогает людям понять, в каком формате вводить данные. Часто маску можно встретить на полях для ввода даты, номера карты или телефона. Маска может самостоятельно ставить пробелы, точки или другие символы, чтобы упростить и ускорить процесс заполнения.
Защита данных
Чаще всего защиту делают в виде иконки глаза, при клике на который можно скрыть или показать заполненные данные. Такая иконка почти всегда есть около поля с вводом пароля.
Саджест
Технология автозаполнения поисковой строки работает по статистике самых популярных запросов. Это очень распространенное дополнение, поэтому его можно встретить на сайте любого поисковика. Варианты подтягиваются из базы данных вертикальным списком — пользователь может выбрать что-то из этого списка, а может и не выбирать. После клика на любой пункт открывается новая страница.
Автозаполнение
Очень похоже на саджест, так как по сути у них одна цель. В отличие от саджеста, автозаполнение просто заполняет строку текстом. Показательный пример — автоматическое заполнение полного адреса, когда человек ввел только одну основную часть.
Есть случаи, когда саджест и автозаполнение применяются одновременно.
В этой ситуации при клике на словосочетание откроется новая страница — сработает саджест. Если кликнуть на иконку справа, поле ввода автоматически заполнится — сработает автокомплит.
Есть и другие дополнительные опции для полей ввода: например, виртуальная клавиатура или возможность голосового ввода. Они применяются редко, но бывают крайне полезны в определенных обстоятельствах.
Браузеры научились помогать людям быстрее и проще взаимодействовать с полями ввода. Они могут добавлять различные дополнительные элементы управления внутрь поля. Важно помнить об этом, потому что такие дополнения могут влиять на размер поля ввода и перекрывать его элементы.
Как это работает?
Это зависит от конкретного браузера и даже от его версии. Когда frontend-разработчик делает поле ввода, он может задать ему определенное назначение. Полный список элементов можно посмотреть тут. Есть поля, предназначенные для пароля, даты, телефона, цифр и прочего. Все браузеры реагируют на поля ввода по-разному, внешний вид этих вспомогательных элементов от вас не зависит — только от операционной системы и браузера. В некоторых браузерах на эти элементы можно влиять, в других — нет.
На картинке выше показаны примеры одного и того же поля ввода <input type=”number”> в разных операционных системах и браузерах.
Если в вашем поле ввода уже есть иконка, но для поля установлено назначение, то вы можете наблюдать разные интересные ситуации, например, дублирование.
Читайте также: