Генератор форм CSS

Результаты

Формы, самая часто используемая часть большинства сайтов, одновременно являются и самой неоформленной у многих из них. Этот генератор создаёт CSS полностью оформленной формы: адаптивная сетка, пары подпись + поле ввода, текстовые области, выпадающие списки и видимые состояния фокуса в едином визуальном стиле. Задайте акцентный цвет, радиус скругления и отступы, затем скопируйте таблицу стилей. CSS сохраняет нативную семантику формы, поэтому проверка данных, работа с клавиатурой и программы чтения экрана функционируют корректно.

Как пользоваться генератором

  1. 1

    Задайте акцентный цвет

    Акцентный цвет определяет кольцо фокуса и цвет рамки каждого поля.

  2. 2

    Выберите радиус скругления

    Радиус применяется к полям ввода, текстовым областям и выпадающим спискам, чтобы все они имели единую форму.

  3. 3

    Задайте отступы

    Отступы управляют вертикальным расстоянием между полями в сетке формы.

  4. 4

    Скопируйте CSS

    Готовая таблица стилей, которую можно вставить и адаптировать, не трогая ваш HTML.

Базовая форма

<form class="form">
  <label class="field">
    <span class="field-label">Email</span>
    <input type="email" required>
    <span class="field-error">Please enter a valid email.</span>
  </label>

  <label class="field">
    <span class="field-label">Password</span>
    <input type="password" minlength="8" required>
  </label>

  <button type="submit" class="button">Sign up</button>
</form>
.field {
  display: block;
  margin-bottom: 1.25rem;
}
.field-label {
  display: block;
  font-weight: 500;
  margin-bottom: .25rem;
}
.field input {
  width: 100%;
  padding: .5rem .75rem;
  font: inherit;
  border: 1px solid #d1d5db;
  border-radius: 6px;
  background: #fff;
  transition: border-color 120ms, box-shadow 120ms;
}
.field input:focus-visible {
  outline: none;
  border-color: #2563eb;
  box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.15);
}
.field input:invalid:not(:placeholder-shown) {
  border-color: #dc2626;
}
.field-error { display: none; color: #dc2626; font-size: .875rem; margin-top: .25rem; }
.field input:invalid:not(:placeholder-shown) ~ .field-error { display: block; }

Четыре распространённых стиля

Стиль Что это Лучше всего подходит для
С контуром Рамка вокруг поля ввода, прозрачный фон Десктопные формы, плотные компоновки
С подчёркиванием Только нижняя граница Минималистичный/редакционный интерфейс
С заливкой Серый фон, без рамки Интерфейс в стиле Material Design
Плавающая метка Метка находится внутри и поднимается вверх при фокусе или вводе значения Мобильные интерфейсы, посадочные страницы

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

Чек-лист по доступности

  • Видимая метка для каждого поля ввода. Ни в коем случае не используйте placeholder в качестве единственной метки: он исчезает при фокусе и не проходит по контрастности.
  • <label for> или обёртывающий <label>. Оба варианта допустимы; обёртывающий немного проще.
  • Индикатор фокуса. Никогда не задавайте outline: none без замены. Он нужен пользователям клавиатуры.
  • Сообщения об ошибках: связывайте их с полем через aria-describedby. Не обозначайте ошибки только цветом, добавьте текстовое сообщение или иконку.
  • Обязательные поля: используйте атрибут required. Для зрячих пользователей добавьте визуальный маркер (звёздочку) в метку.
  • Типы полей ввода: используйте type="email", type="tel", type="url", type="number". Мобильные клавиатуры подстраиваются под них.
  • Атрибуты autocomplete: autocomplete="email", autocomplete="current-password" и т. д. Это значительно сокращает объём ввода для пользователей.

Нативные состояния валидации

В CSS существуют псевдоклассы для проверки корректности форм:

  • :required / :optional
  • :valid / :invalid
  • :in-range / :out-of-range (для числовых значений с минимальным и максимальным значениями)
  • :placeholder-shown (пустое поле; виден позиционирующий символ)
  • :user-invalid (недействительный код; при этом пользователь уже взаимодействовал с системой, это соответствует типу ошибки)

Псевдокласс :user-invalid представляет собой наиболее удобный способ отображения ошибок только после выполнения пользователем действия, исключая появление красных рамок до взаимодействия. Поддержка была внедрена во всех основных версиях примерно в 2023 году.

Отключённое состояние

.field input:disabled {
  background: #f3f4f6;
  color: #9ca3af;
  cursor: not-allowed;
}

Отключённые поля ввода нельзя сфокусировать и они не отправляются с формой. Если вы хотите оставить их доступными для программ чтения с экрана, используйте readonly вместо этого: форма отправит значение, но пользователь не сможет его изменить.

Часто задаваемые вопросы

Заменители исчезают сразу после ввода пользователем текста, поэтому их нельзя использовать в качестве меток. Кроме того, текст заменителей обычно имеет низкий контраст и не соответствует требованиям WCAG. Рекомендуется использовать видимую метку вместе с опциональным заменителем для указания форматных параметров.

Поскольку :invalid автоматически применяется к пустым обязательным полям, используйте :user-invalid (с учётом взаимодействия) или комбинируйте :invalid:not(:placeholder-shown) в качестве временного решения в более старых браузерах.

Установите значение appearance: none, удалите стандартную стрелку и добавьте собственную, с помощью фонового изображения или элемента обрамления с псевдоэлементом в виде стрелки. Списки опций внутри сохраняют стиль операционной системы и не подлежат настройке с помощью CSS.

Оба подхода применяются: валидация HTML-кодов (required, type, pattern) используется для простых случаев без использования JavaScript; JavaScript отвечает за сложные правила (уровень безопасности паролей, взаимозависимости между полями). Обязательно также используйте проверку на сервере, валидация на стороне клиента предназначена для улучшения пользовательского опыта, а не для обеспечения безопасности.

Сопутствующие инструменты

Справочная таблица ASCII

Полная таблица ASCII от 0 до 127 с десятичным, шестнадцатеричным, восьмеричным и двоичным представлением, а также записью числовых ссылок HTML, включая NUL, LF и DEL.

Справочник сочетаний клавиш

Ищите документированные сочетания по умолчанию для VS Code, Chrome и Bash с GNU Readline в macOS, Windows и Linux.

Справочник символов HTML

Справочник HTML-сущностей с поиском, их именованными и числовыми кодами, а также копированием специальных символов и знаков одним кликом.

Счетчик FPS

Измерьте FPS браузера через requestAnimationFrame: сглаживание, минимальная и максимальная частота кадров, порог предупреждения и график по желанию. Работает локально, без загрузок и API.

Генератор цветовой палитры

Создавайте монохромные, аналоговые, комплементарные, триадные или тетрадные палитры из базового HEX-цвета и экспортируйте готовые CSS-переменные.

Генератор случайных букв

Генерируйте случайные буквы A-Z. Выберите количество, верхний или нижний регистр либо смешанный вариант для игр, заданий и уроков.