Осуществление
Существует три различных реализации: псевдоэлементы, псевдоклассы и ничего.
- WebKit, Blink (Safari, Google Chrome, Opera 15+) и Microsoft Edge используют псевдоэлемент:
::-webkit-input-placeholder
. [ Ref ]
- Mozilla Firefox с 4 по 18 использует псевдокласс:
:-moz-placeholder
( one двоеточие). [ Ref ]
- Mozilla Firefox 19+ использует псевдоэлемент:
::-moz-placeholder
, но старый селектор все еще будет работать некоторое время. [ Ref ]
- Internet Explorer 10 и 11 используют псевдокласс:
:-ms-input-placeholder
. [ Ref ]
- апрель 2017: Большинство современных браузеров поддерживают простой псевдоэлемент
::placeholder
[ Ref ]
Internet Explorer 9 и ниже вообще не поддерживает атрибут placeholder
, а Opera 12 и ниже не поддерживают любой селектор CSS для заполнителей.
Дискуссия о лучшей реализации все еще продолжается. Обратите внимание, что псевдоэлементы действуют как реальные элементы в Shadow DOM . padding
на input
не будет иметь тот же цвет фона, что и псевдоэлемент.
CSS селекторы
Пользовательские агенты должны игнорировать правило с неизвестным селектором. См. Селекторный уровень 3 :
a группа селекторов, содержащая недопустимый селектор, недействительна.
Итак, нам нужны отдельные правила для каждого браузера. В противном случае вся группа будет игнорироваться всеми браузерами.
::-webkit-input-placeholder { /* WebKit, Blink, Edge */
color: #909;
}
:-moz-placeholder { /* Mozilla Firefox 4 to 18 */
color: #909;
opacity: 1;
}
::-moz-placeholder { /* Mozilla Firefox 19+ */
color: #909;
opacity: 1;
}
:-ms-input-placeholder { /* Internet Explorer 10-11 */
color: #909;
}
::-ms-input-placeholder { /* Microsoft Edge */
color: #909;
}
::placeholder { /* Most modern browsers support this now. */
color: #909;
}
<input placeholder="Stack Snippets are awesome!">
Замечания по использованию
- Будьте осторожны, чтобы избежать плохих контрастов. Заполнитель Firefox, по-видимому, имеет значение по умолчанию с уменьшенной непрозрачностью, поэтому необходимо использовать
opacity: 1
здесь.
- Обратите внимание, что текст-заполнитель просто обрезается, если он не умещается - задайте размер элементов ввода в
em
и протестируйте их с большими настройками минимального размера шрифта. Не забудьте переводы: для некоторых языков нужно больше места для того же слова.
- Браузеры с поддержкой HTML для
placeholder
, но без поддержки CSS для этого (например, Opera) также должны быть протестированы.
- Некоторые браузеры используют дополнительный CSS по умолчанию для некоторых типов
input
(email
, search
). Это может повлиять на рендеринг неожиданным образом. Используйте свойства -webkit-appearance
и -moz-appearance
, чтобы изменить это. Пример: * +1096 *
[type="search"] {
-moz-appearance: textfield;
-webkit-appearance: textfield;
appearance: textfield;
}