Псевдоэлемент ::placeholder | CSS | WebReference
Псевдоэлемент, с помощью которого задаётся стилевое оформление подсказывающего текста, созданного атрибутом placeholder. Допускается использовать свойства для изменения вида текста, например, задать шрифт и цвет.
Синтаксис ?
Селектор::placeholder { ... }
Обозначения
Описание | Пример | |
---|---|---|
<тип> | Указывает тип значения. | <размер> |
A && B | Значения должны выводиться в указанном порядке. | <размер> && <цвет> |
A | B | Указывает, что надо выбрать только одно значение из предложенных (A или B). | normal | small-caps |
A || B | Каждое значение может использоваться самостоятельно или совместно с другими в произвольном порядке. | width || count |
[ ] | Группирует значения. | [ crop || cross ] |
* | Повторять ноль или больше раз. | [,<время>]* |
+ | Повторять один или больше раз. | <число>+ |
? | Указанный тип, слово или группа не является обязательным. | inset? |
{A, B} | Повторять не менее A, но не более B раз. | <радиус>{1,4} |
# | Повторять один или больше раз через запятую. | <время># |
Пример
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>placeholder</title> <style> body { background: #053f38; } input[type="search"] { border: 1px solid #98baba; /* Параметры рамки */ background: transparent; /* Прозрачный фон */ padding: 1px 4px; /* Поля вокруг текста */ color: #fff; /* Цвет текста */ } input[type="search"]::-moz-placeholder { color: #ffd595; /* Цвет подсказывающего текста */ } input[type="search"]::-webkit-input-placeholder { color: #ffd595; } input[type="search"]:-ms-input-placeholder { color: #ffd595; } input[type="search"]::-ms-input-placeholder { color: #ffd595; } input[type="search"]::placeholder { color: #ffd595; } </style> </head> <body> <form action="handler.php"> <p><input type="search" placeholder="Поиск по сайту" name="q"> <input type="submit" value="Найти"></p> </form> </body> </html>
Результат примера показан на рис. 1.
Рис. 1. Использование ::placeholder
Примечание
Internet Explorer использует псевдокласс :-ms-input-placeholder.
Microsoft Edge использует псевдоэлемент ::-ms-input-placeholder.
Chrome, до версии 57, Opera до версии 44, Safari до версии 10.1 и Android используют псевдоэлемент ::-webkit-input-placeholder.
Firefox с версии 4 и до 19 использует псевдокласс :-moz-placeholder.
Firefox до версии 51 использует псевдоэлемент ::-moz-placeholder.
Браузеры
В таблице браузеров применяются следующие обозначения.
- — свойство полностью поддерживается браузером со всеми допустимыми значениями;
- — свойство браузером не воспринимается и игнорируется;
- — при работе возможно появление различных ошибок, либо свойство поддерживается лишь частично, например, не все допустимые значения действуют или свойство применяется не ко всем элементам, которые указаны в спецификации.
Число указывает версию браузера, начиная с которой свойство поддерживается.
×Автор и редакторы
Автор: Влад Мержевич
Последнее изменение: 30.08.2017
Редакторы: Влад Мержевич

Атрибут placeholder | htmlbook.ru
Internet Explorer | Chrome | Opera | Safari | Firefox | Android | iOS |
10.0+ | 8.0+ | 11.50+ | 5.0+ | 4.0+ | 3.0+ | 3.0+ |
Спецификация
HTML: | 3.2 | 4.01 | 5.0 | XHTML: | 1.0 | 1.1 |
Описание
Выводит текст внутри текстового поля, который исчезает при получении фокуса.
Синтаксис
<textarea placeholder="строка">
</textarea>
Значения
Текстовая строка. Если внутри строки предполагается пробел, ее необходимо брать в двойные или одинарные кавычки.
Значение по умолчанию
Нет.
Пример
HTML5IE 10CrOpSaFx
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Тег textarea, атрибут placeholder</title>
</head>
<body>
<form action="handler.php">
<p><textarea placeholder="Ваше сообщение"></textarea></p>
<p><input type="submit" value="Отправить"></p>
</form>
</body>
</html>
Результат данного примера в браузере Chrome показан на рис. 1.
Рис. 1. Вид текста, созданного с помощью атрибута placeholder
Firefox 4 допускает изменять стиль текста, выводимого через атрибут placeholder, с помощью псевдокласса :-moz-placeholder.
textarea:-moz-placeholder { color: red; }
В Safari и Chrome стиль текста меняется следующим образом:
textarea::-webkit-input-placeholder { color: red; }
Стилизуем placeholder при помощи CSS. Синтаксис, трюки, поддерживаемые стили в html5
Атрибут placeholder применяется для призыва к действию внутри пустых элементов input и textarea. В этой статье мы рассмотрим возможности стилизации текста placeholder-a, а также некоторые трюки, которые позволят сделать его более удобным и функциональным.
Итак, начнем с примера для тех, кто не знает, что такое placeholder.
html
<input type="text" placeholder="Оставьте сообщение здесь">
input placeholder demo
Стиль placeholder-a можно изменить с помощью такого набора css правил:
css
::-webkit-input-placeholder {color:#c0392b;}
::-moz-placeholder {color:#c0392b;}/* Firefox 19+ */
:-moz-placeholder {color:#c0392b;}/* Firefox 18- */
:-ms-input-placeholder {color:#c0392b;}
Выглядит страшновато, не правда ли? Дело в том, что этого до сих пор нет в стандартах. Каждый браузер по-своему реализовал поддержку стилизации placeholder-а.
В IE и старых firefox (до 18-го) placeholder считается псевдоклассом, а в новых firefox, webkit и blink – псевдоэлементом.
Смотрим, что получилось:
input placeholder demo
Нужно сказать, что поддерживаются не все возможные css свойства. Большинство современных браузеров позволяют изменить:
- font (и сопутствующие свойства)
- background (и сопутствующие свойства)
- color
- word-spacing
- letter-spacing
- text-decoration
- vertical-align
- text-transform
- line-height
- text-indent
- text-overflow
- opacity
А если placeholder не вмещается?
Иногда поля для ввода текста сокращаются по ширине из-за особенностей лейаута, в частности на мобильных девайсах. В этом случае длинный текст placeholder-а будет некрасиво обрезан. Чтобы предотвратить это, вы можете использовать
. Такой синтаксис будет работать во всех новых браузерах.
css
input[placeholder] {text-overflow:ellipsis;}
input::-moz-placeholder {text-overflow:ellipsis;}
input:-moz-placeholder {text-overflow:ellipsis;}
input:-ms-input-placeholder {text-overflow:ellipsis;}
input placeholder demo
Как скрыть placeholder при фокусе?
Скрывание placeholder-а происходит по-разному.
- в некоторых браузерах при получении фокуса инпутом
- в других браузерах при наличии хотя бы одного введенного символа
Мне больше нравится первый вариант. Для того, чтобы задать такое поведение во всех браузерах, поддерживающих placeholder, определим следующие css правила:
css
:focus::-webkit-input-placeholder {color: transparent}
:focus::-moz-placeholder {color: transparent}
:focus:-moz-placeholder {color: transparent}
:focus:-ms-input-placeholder {color: transparent}
input placeholder demo
Скрываем placeholder красиво
Можно также добавить transition для появления и скрытия placeholder-a:
input placeholder demo
Вот сss:
css
/* плавное изменение прозрачности placeholder-а при фокусе */ .input1::-webkit-input-placeholder {opacity: 1; transition: opacity 0.3s ease;} .input1::-moz-placeholder {opacity: 1; transition: opacity 0.3s ease;} .input1:-moz-placeholder {opacity: 1; transition: opacity 0.3s ease;} .input1:-ms-input-placeholder {opacity: 1; transition: opacity 0.3s ease;} .input1:focus::-webkit-input-placeholder {opacity: 0; transition: opacity 0.3s ease;} .input1:focus::-moz-placeholder {opacity: 0; transition: opacity 0.3s ease;} .input1:focus:-moz-placeholder {opacity: 0; transition: opacity 0.3s ease;} .input1:focus:-ms-input-placeholder {opacity: 0; transition: opacity 0.3s ease;} /* сдвиг placeholder-а вправо при фокусе*/ .input2::-webkit-input-placeholder {text-indent: 0px; transition: text-indent 0.3s ease;} .input2::-moz-placeholder {text-indent: 0px; transition: text-indent 0.3s ease;} .input2:-moz-placeholder {text-indent: 0px; transition: text-indent 0.3s ease;} .input2:-ms-input-placeholder {text-indent: 0px; transition: text-indent 0.3s ease;} .input2:focus::-webkit-input-placeholder {text-indent: 500px; transition: text-indent 0.3s ease;} .input2:focus::-moz-placeholder {text-indent: 500px; transition: text-indent 0.3s ease;} .input2:focus:-moz-placeholder {text-indent: 500px; transition: text-indent 0.3s ease;} .input2:focus:-ms-input-placeholder {text-indent: 500px; transition: text-indent 0.3s ease;} /* сдвиг placeholder-а вниз при фокусе*/ .input3::-webkit-input-placeholder {line-height: 20px; transition: line-height 0.5s ease;} .input3::-moz-placeholder {line-height: 20px; transition: line-height 0.5s ease;} .input3:-moz-placeholder {line-height: 20px; transition: line-height 0.5s ease;} .input3:-ms-input-placeholder {line-height: 20px; transition: line-height 0.5s ease;} .input3:focus::-webkit-input-placeholder {line-height: 100px; transition: line-height 0.5s ease;} .input3:focus::-moz-placeholder {line-height: 100px; transition: line-height 0.5s ease;} .input3:focus:-moz-placeholder {line-height: 100px; transition: line-height 0.5s ease;} .input3:focus:-ms-input-placeholder {line-height: 100px; transition: line-height 0.5s ease;}
Надеюсь, вам это пригодится. Пишите замечания и предложения в комментариях.
Стилизация и анимация placeholder в input и textarea при помощи CSS
Обычно атрибут placeholder в input и textarea используется для призыва к действию внутри этих элементов. В этой заметке опишу несколько вариантов стилизации текста placeholder-ов, а также варианты их анимации
::-webkit-input-placeholder {color:#c0392b;}
::-moz-placeholder {color:#c0392b;}/* Firefox 19+ */
:-moz-placeholder {color:#c0392b;}/* Firefox 18- */
:-ms-input-placeholder {color:#c0392b;}
Объемность кода для стилизации такого простого свойства обусловлена отсутсивтемотсутствием общего стандарта, в связи с чем каждый браузер по-своему реализовал поддержку стилизации placeholder-а.
Кроме того, поддерживаются не все css свойства. Вот перечень точно поддержываемых свойств:
font (и связанные)
background (и связанные)
color
word-spacing
letter-spacing
text-decoration
vertical-align
text-transform
line-height
text-indent
text-overflow
opacity
Также бывает так, что текст плейсхолдера «выходит» за пределы ширины элемента input или textarea (частый случай для мобильных устройств). При этом он автоматически некрасиво обрезается.
Исправить эту неприятность нам поможет такое css-свойство, как text-overflow: ellipsis
, которое добавит эстетическое троееточие к обрезанному участку placeholder-a. В стилях прописываем вот так:
input[placeholder] {text-overflow:ellipsis;}
input::-moz-placeholder {text-overflow:ellipsis;}
input:-moz-placeholder {text-overflow:ellipsis;}
input:-ms-input-placeholder {text-overflow:ellipsis;}
Для придания еще большей эстетики нашим placeholder-ам есть возможность добавить эффект его скрытия при получении фокуса соответствующего элемента.
Несколько примеров такого скрытия с элементами анимации:
/* плавное изменение прозрачности placeholder-а при фокусе */ .input::-webkit-input-placeholder {opacity: 1; transition: opacity 0.3s ease;} .input::-moz-placeholder {opacity: 1; transition: opacity 0.3s ease;} .input:-moz-placeholder {opacity: 1; transition: opacity 0.3s ease;} .input:-ms-input-placeholder {opacity: 1; transition: opacity 0.3s ease;} .input:focus::-webkit-input-placeholder {opacity: 0; transition: opacity 0.3s ease;} .input:focus::-moz-placeholder {opacity: 0; transition: opacity 0.3s ease;} .input:focus:-moz-placeholder {opacity: 0; transition: opacity 0.3s ease;} .input:focus:-ms-input-placeholder {opacity: 0; transition: opacity 0.3s ease;} /* сдвиг placeholder-а вправо при фокусе*/ .input::-webkit-input-placeholder {text-indent: 0px; transition: text-indent 0.3s ease;} .input::-moz-placeholder {text-indent: 0px; transition: text-indent 0.3s ease;} .input:-moz-placeholder {text-indent: 0px; transition: text-indent 0.3s ease;} .input:-ms-input-placeholder {text-indent: 0px; transition: text-indent 0.3s ease;} .input:focus::-webkit-input-placeholder {text-indent: 500px; transition: text-indent 0.3s ease;} .input:focus::-moz-placeholder {text-indent: 500px; transition: text-indent 0.3s ease;} .input:focus:-moz-placeholder {text-indent: 500px; transition: text-indent 0.3s ease;} .input:focus:-ms-input-placeholder {text-indent: 500px; transition: text-indent 0.3s ease;} /* сдвиг placeholder-а вниз при фокусе*/ .input::-webkit-input-placeholder {line-height: 20px; transition: line-height 0.5s ease;} .input::-moz-placeholder {line-height: 20px; transition: line-height 0.5s ease;} .input:-moz-placeholder {line-height: 20px; transition: line-height 0.5s ease;} .input:-ms-input-placeholder {line-height: 20px; transition: line-height 0.5s ease;} .input:focus::-webkit-input-placeholder {line-height: 100px; transition: line-height 0.5s ease;} .input:focus::-moz-placeholder {line-height: 100px; transition: line-height 0.5s ease;} .input:focus:-moz-placeholder {line-height: 100px; transition: line-height 0.5s ease;} .input:focus:-ms-input-placeholder {line-height: 100px; transition: line-height 0.5s ease;}
На этом и закончим.