web design uiOctober 30, 20267 min read

Placeholder и label: почему подсказка внутри поля не заменяет подпись, и какую спецификацию поля использовать

Серый текст внутри поля исчезает, как только человек начинает печатать. Почему placeholder не заменяет label, где размещать подсказки, какой цвет рамки проходит проверку и точная спецификация поля для разработчика.

By Boone
XLinkedIn
Placeholder vs Label: Why Placeholder Text Is Not a Label, and the Field Spec to Use

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

Что идет не так, когда placeholder заменяет подпись

Email

До ввода: выглядит чисто

mia@brainy.ink

✕ После ввода: для чего было это поле?

Левое поле выглядит аккуратно, поэтому его так любят дизайнеры. Правое поле то же самое, только двумя секундами позже. Слова «Email» больше нет, проверить подпись нельзя, а в длинной форме человек не понимает, какой ответ к какому полю относится.

Это проблема памяти, а не вкуса. Исследование Nielsen Norman Group о placeholder в полях форм показало, что исчезающий текст нагружает кратковременную память и мешает перепроверить ответы перед отправкой. Наш общий гид по лучшим практикам дизайна форм охватывает всю форму, а эта статья глубоко разбирает одно решение, которое создает больше всего проблем.

Есть и вторая проблема. Текст placeholder по умолчанию серый, и этот серый обычно слишком бледный. Популярный серый #8E8E93 для placeholder дает контраст около 3,3 к 1 на белом, меньше 4,5 к 1, которые WCAG требует для текста. Так что единственную подсказку, которую вы дали, еще и трудно прочитать.

Решение 1: настоящая подпись над полем

Email

mia@brainy.ink

✓ Подпись сверху: остается после ввода

Рабочая почта

name@company.com

✓ Placeholder только как пример

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

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

Именно настоящую подпись озвучивают скринридеры. В HTML свяжите ее с полем, чтобы нажатие на подпись ставило фокус в input:

html
<label for="email">Email</label> <input id="email" name="email" type="email" autocomplete="email" placeholder="name@company.com" />

Решение 2: подсказки под полем

Пароль

••••••••

Не меньше 8 символов.

✓ Подсказка под полем: остается, пока печатаешь

Не меньше 8 символов

✕ Подсказка как placeholder: пропала с первой клавиши

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

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

Решение 3: рамка, которую видно

Email

mia@brainy.ink

✕ Рамка #E5E5E5: призрак

Email

mia@brainy.ink

✓ Рамка #79747E: легко найти

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

WCAG 1.4.11 требует, чтобы визуальная информация, нужная для распознавания компонента интерфейса, имела контраст не менее 3 к 1 с соседним цветом. #E5E5E5 на белом дает около 1,3 к 1, это провал. #79747E, цвет outline в Material 3, дает около 4,6 к 1, это уверенный проход. Берите 1,5 px, чтобы рамка держалась и на экранах с низкой плотностью.

Обратите внимание на разницу с разделителями. Светлый серый вроде #E5E5EA нормален между строками списка, ведь разделитель должен лишь ощущаться. Рамку поля нужно видеть. О разделителях и серых поверхностях мы писали в статье про цвет фона светлой темы.

Решение 4: попросите правильную клавиатуру

Поле, которое знает свое назначение, может открыть полезную клавиатуру, и на iPhone, и на Android. Поле email, которое открывается с готовой клавишей @, экономит нажатие и предотвращает опечатки. В HTML это один атрибут:

ПолеТип вводаЧто открывает телефон
Emailtype="email"Клавиатура с @ и .
Телефонtype="tel"Цифровая панель
Сайтtype="url"Клавиатура с / и .com
Карта или кодinputmode="numeric"Цифровая панель, без счетчика
Поискtype="search"Клавиша поиска на клавиатуре

Добавьте значения autocomplete, например email и name, чтобы телефон мог заполнить поле сам.

Спецификация поля

ЧастьЗначение
ПодписьНад полем, 15 px, semibold
ПолеВысота 48 px, радиус 12 px
Рамка1,5 px, цвет #79747E
Текст16 px, не меньше
ПодсказкаПод полем, 13 px
PlaceholderПример или ничего
Рамка, которую стоит использовать, и два серых, которых стоит избегать для рамки. Нажмите на цвет, чтобы скопировать код.

Текст 16 px важен на iPhone: Safari приближает страницу, когда человек нажимает на поле с более мелким текстом, и это выглядит как баг.

css
.field label { font: 600 15px/1.3 system-ui; display: block; margin-bottom: 6px; } .field input { height: 48px; padding: 0 14px; font-size: 16px; border: 1.5px solid #79747E; border-radius: 12px; } .field input::placeholder { color: #8E8E93; } .field .hint { font-size: 13px; margin-top: 6px; }

Высота 48 px дает удобную зону касания, а радиус 12 px это выбор, а не правило: подстройте под свою систему и держите одинаковым у всех полей.

FAQ

Можно ли использовать placeholder вместо подписи?

Нет. Placeholder исчезает, когда человек начинает печатать, и поле теряет название. Поставьте видимую подпись над полем, а placeholder оставьте для примера формата или не заполняйте его вовсе.

Доступен ли текст placeholder?

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

Где разместить подпись: над полем или внутри?

Над полем, по левому краю. Так работает при любой ширине экрана, подпись видна во время набора, а взгляд идет по одной прямой линии вниз по форме.

Что писать в placeholder?

Пример формата, например name@company.com, или ничего. Никогда не помещайте туда инструкцию, которая нужна во время набора. Ее место в подсказке под полем.

Какого цвета должна быть рамка поля ввода?

Достаточно темной, чтобы давать контраст не менее 3 к 1 с фоном страницы, как требует WCAG 1.4.11. #79747E, цвет outline в Material 3, дает около 4,6 к 1 на белом. Бледный #E5E5E5 дает около 1,3 к 1 и не проходит.

Решают ли плавающие подписи проблему placeholder?

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

Источники

  • Nielsen Norman Group, Placeholders in Form Fields Are Harmful (Katie Sherwin, 2014): текст placeholder исчезает при вводе, нагружает кратковременную память и затрудняет проверку ответов.
  • WCAG 2.1, 1.4.11 Non-text Contrast (3 к 1 для компонентов интерфейса) и 1.4.3 Contrast (Minimum).
  • Контрасты на белом, вычисленные по формуле относительной яркости WCAG: #E5E5E5 1,26 к 1, #79747E 4,55 к 1, серый placeholder #8E8E93 3,26 к 1. #79747E это Outline из Material 3 (NeutralVariant50), взятый из androidx Compose ColorLightTokens.
  • MDN, элемент input, атрибут type: type="email" открывает на телефонах клавиатуру для почты.
  • Размеры полей в таблице спецификации (подпись 15 px, высота 48 px, радиус 12 px, подсказка 13 px) это наша собственная рекомендация, а не значение платформы.
  • Впервые опубликовано как карусель в UX Brainy.

Want every form in your product to feel this easy to fill in? Our team designs and builds product UI with the field details decided once.

Get Started

More from Brainy Papers

Keep reading