Форма

Форма соединяет цель, поля, валидацию и результат в один сценарий отправки.

Статус: experimental · в системе с 2026-07

Когда использовать

  • Нужно получить от пользователя несколько связанных значений.
  • Ошибки можно исправить на месте до перехода дальше.

Не использовать:

  • Нужно изменить одно булево значение — достаточно switch.
  • Данные только показываются и не редактируются.

Состав

Юнит или компонентРоль
codeКод подключения или готовый фрагмент рядом с полями.
qr-codeГотовый QR-код подключения или подтверждения.
lang-menuВыбор языка интерфейса на экране входа.
subscription-limitДиапазон давности подписки в настройке аудитории.
stepsПоложение текущего этапа в многошаговой форме.
titleЗаголовок именованного блока или секции внутри формы.
labelПодпись группы контролов или значения, у которого нет собственной подписи.
user-lineКраткая строка владельца или автора рядом с полями и сводкой формы.
page-navigationРазделы длинной формы создания: где человек сейчас и сколько осталось.
badgeМетка поля или секции формы: «новое», «бета», требуемый тариф.
cardИменованная секция формы с собственной поверхностью и дочерними узлами.
islandПоверхность региона без заголовка: блок полей, итог формы в подвале.
fields-groupСтроки из равных ячеек: пары «ключ — значение», диапазоны, координаты.
pickerВыбор одного варианта плитками, когда у вариантов есть значок и пояснение.
schedulerРасписание по часам недели: сетка вместо семи полей времени.
descriptionПояснение под полем или группой: что человек вводит и почему.
comboПовторяющийся блок формы: строки, которые человек добавляет и удаляет.
form-modalФорма в модальном окне: поля в теле, пояснение или сводка — в боковой колонке.
inputКороткие текстовые значения.
copy-fieldСгенерированное значение рядом с полями, которое человек копирует, а не вводит.
input-numberАрифметические числа, границы и пошаговое изменение.
sliderПоложение или две границы на известной числовой шкале.
file-uploadОдин или несколько локальных файлов до отправки формы.
input-timeОдно время суток с точностью до минуты.
input-time-rangeНачало и окончание одного внутрисуточного интервала.
input-dateОдна календарная дата: срок, начало действия, день события.
input-date-rangeПериод между двумя датами: срок кампании, окно отчёта.
meterИзвестная величина внутри диапазона рядом с полями: остаток бюджета, заполненность лимита.
selectОдин вариант из длинного или раскрываемого списка.
comboboxОдин вариант из длинного списка, где нужен поиск по вводу.
input-selectСоставная строка правила или фильтра: связанные селекты одной сущности в одном поле.
multi-selectНесколько значений из длинного плоского списка.
tag-inputСвободные метки без справочника: хэштеги, ключевые слова, домены.
dualistМножественный выбор из длинного списка, когда выбранное важно видеть рядом с источником.
textareaМногострочный текст.
segmented-controlКороткие взаимоисключающие режимы внутри формы.
toggle-groupНабор устойчивых режимов секции: несколько независимых либо ровно один.
input-colorЦвет как значение поля: фирменный цвет, метка, фон креатива.
checkboxОдин независимый признак, который уходит вместе с отправкой формы.
checkbox-groupНесколько независимых признаков под общим вопросом секции.
radioРовно один вариант из видимого взаимоисключающего набора.
switchНастройка рядом с полями, которая применяется сразу и не ждёт отправки.
tagУже выбранные значения и метки рядом с полем, которое их порождает.
starsОценка от одной до пяти звёзд рядом с полями: качество площадки, отзыв, приоритет.
tabsРавноправные панели внутри одной секции: предпросмотр или разные представления одного значения.
accordionВторичные разделы формы, которые не нужны сразу: справка и редкие настройки под свёрнутым заголовком.
tableСравнение однородных строк по общим колонкам внутри секции: уже добавленные позиции или справочные значения рядом с полями.
statusСостояние сущности рядом с её полями: модерация, публикация или другой этап, на который человек смотрит и который иногда меняет прямо в форме.
avatarВизуальный идентификатор сущности рядом с её полями: владелец записи в сводной карточке формы.
dividerСмысловая граница между группами внутри одной секции, когда отступа для неё недостаточно.
iconЗначок рядом с текстом или полем: скрыто, предупреждение, справка — без кнопки вокруг.
thumbnailИллюстрация варианта в карточке выбора: превью формата объявления или типа шаблона.
buttonОтправка, отмена и вторичные действия формы.
alertОбратная связь, относящаяся ко всей форме, а не к отдельному полю.
breadcrumbsПуть к текущей странице над заголовком формы.
linkПереход к справке или связанной странице рядом с заголовком либо полем.
tooltipКороткое пояснение к полю или кнопке по наведению — поверх формы.
popoverНебольшая панель с полями рядом с кнопкой: добавить правило, уточнить значение — поверх формы.
dialogПодтверждение необратимого шага или уход с несохранённой формы — поверх экрана.
entities-list-dialogМассив значений строками поверх поля: список доменов, id, ключей.
toastРезультат отправки, который не должен прерывать поток — поверх экрана.

Ограничения

  • Обязательно: Давать форме видимую цель и сохранять порядок полей равным порядку чтения.
  • Обязательно: Показывать ошибку после blur или попытки отправки и связывать её с конкретным полем.
  • Обязательно: Оставлять ровно одно главное действие accent; отмену оформлять как default или ghost.
  • Рекомендуется: Делить длинную форму на именованные секции, каждая из которых отвечает за одну локальную задачу.
  • Обязательно: Использовать heading для обычного раздела полей, а fieldset с legend — только когда секция является одним групповым вопросом.
  • Запрещено: Вводить универсальный компонент FormSection, который скрывает выбор семантики heading или fieldset/legend.
  • Запрещено: Блокировать всю форму из-за первой ошибки или валидировать каждый символ.

Логика отклика

  1. Цель Пользователь понимает результат формы до ввода. Заголовок и краткая подсказка задают контекст.
  2. Ввод Пользователь заполняет поля в естественном порядке. Label остаётся видимым; hint заранее объясняет формат.
  3. Проверка Пользователь покидает поле или отправляет форму. Ошибка появляется у поля и объявляется assistive technology.
  4. Результат Пользователь исправляет данные и отправляет форму. Ошибка исчезает сразу; результат показывается на уровне формы или области.

Контекстный пример

Правильно

Одна цель, именованные секции и локальная обратная связь

Секции отвечают за отдельные задачи, поля идут одним потоком, ошибки стоят у причины, единственная accent-кнопка называет результат.

input select textarea button

Неправильно

Безымянный поток, конкурирующие действия и ранние ошибки

Разные задачи смешаны без секций, несколько accent-кнопок спорят за внимание, а сообщения меняются на каждый символ и отделены от полей.

input button

Скелет экрана

  1. headingЦель формы и краткое объяснение.
  2. sectionsОдин поток именованных задач; внутри каждой — связанные поля и подходящая HTML-семантика.
  3. feedbackОбщая обратная связь только когда она относится ко всей форме.
  4. actionsОтмена и одно главное действие; в каркасе приложения они стоят в титульной строке страницы, в каркасе входа — в конце острова, но не в потоке полей.