Общий подход состоит в том, чтобы использовать значение по умолчанию в качестве метки, а затем удалить его, когда поле получает фокус.
Мне действительно не нравится этот подход, так как он имеет доступность и удобство использования.
Вместо этого я бы начал использовать стандартный элемент рядом с полем.
Затем, если JavaScript активен, установите класс для элемента-предка, который заставляет некоторые новые стили применять это:
- Относительно расположите div, который содержит ввод и метку
- Абсолютно позиционируйте этикетку
- Абсолютно расположите вход сверху метки
- Удалите границы ввода и установите его цвет фона на прозрачный
Затем, а также всякий раз, когда вход теряет фокус, я проверяю, имеет ли вход значение. Если это так, убедитесь, что у родительского элемента есть класс (например, «hide-label»), в противном случае убедитесь, что у него нет этого класса.
Всякий раз, когда вход получает фокус, установите этот класс.
Таблица стилей будет использовать это имя класса в селекторе, чтобы скрыть метку (с помощью text-indent: -9999px; обычно).
Этот подход обеспечивает достойный опыт для всех пользователей, включая тех, у кого отключен JS, и тех, кто использует программы чтения с экрана.