- Атрибут
placeholder - Псевдоэлемент
::placeholder - Псевдокласс
:placeholder-shown - Подсказка пропадает при получении фокуса
- Обрезать длинный подсказывающий текст и поставить многоточие
- Сделать смещающиеся или всплывающие
labelв веб-форме - Для
divсcontenteditable - Не рекомендуется
- Атрибут
title - Как сделать
placeholderдля select
Исчезающая подсказка в input и textarea HTML
Внутри пустого поля ввода input или textarea показывается надпись приглушенного цвета из атрибута placeholder, которая пропадает при вводе первого символа. Она может быть образцом значения или кратким описанием ожидаемого формата. [whatwg.org]
<input placeholder="текст-подсказка"> <textarea placeholder="текст-подсказка"></textarea>
Стремясь уменьшить форму и сократить визуальный шум, дизайнеры тег label заменяют на атрибут placeholder, тем самым увеличивая нагрузку на кратковременную память. Людям с нарушенным зрением подсказку трудно прочитать. Лучше разместить label непосредственно над полем ввода. Пустое поле легче распознаётся как элемент, требующий заполнения. [uxdesign.cc]
Стилизация: изменить цвет placeholder CSS
Псевдоэлемент ::placeholder CSS определяет внешний вид подсказки из атрибута placeholder. Список поддерживаемых свойств ограничен тем же списком, что псевдоэлемент ::first-line [csswg.org] и на текущий день не включает плавный переход transition.
<style>
.raz::placeholder {
color: red;
opacity: 1; /* сделать обычным неполупрозрачным цветом в Firefox */
}
</style>
<input placeholder="текст-подсказка" class="raz">
<textarea placeholder="текст-подсказка" class="raz"></textarea>
Поменять стиль поля ввода с placeholder CSS
Селектор [placeholder] определяет внешний вид элементов, у которых задан атрибут placeholder.
<style>
[placeholder] {
background: linear-gradient(to right top, bisque 50%, cornsilk 50%);
}
</style>
<input>
<textarea></textarea>
<input placeholder="текст-подсказка">
<textarea placeholder="текст-подсказка"></textarea>
Псевдокласс :placeholder-shown CSS определяет внешний вид поля, пока видна подсказка из атрибута placeholder.
<style>
.raz:placeholder-shown {
background: linear-gradient(to right top, bisque 50%, cornsilk 50%);
}
</style>
<input placeholder="текст-подсказка" class="raz">
<textarea placeholder="текст-подсказка" class="raz"></textarea>
Подсказка пропадает при получении фокуса <input type="text | password | другие"> и <textarea></textarea>
<style>
.raz:focus::placeholder {
opacity: 0;
}
</style>
<input placeholder="текст-подсказка" class="raz">
<textarea placeholder="текст-подсказка" class="raz"></textarea>
Обрезать длинный подсказывающий текст и поставить многоточие
<style>
.raz:placeholder-shown {
text-overflow: ellipsis;
}
</style>
<input placeholder="Обязательно заполняется при наличии" class="raz">
<style>
.raz:placeholder-shown {
text-overflow: "\01F4E7"; /* свойством text-overflow может быть любой символ, в том числе emoji */
}
</style>
<input type="email" class="raz6" placeholder="name@site.ru ">
Текст в плейсхолдер должен быть коротким, иначе он не имеет смысла, так как его никто не сможет увидеть.
Сделать смещающиеся или всплывающие метки в веб-форме
<style>
.raz {
position: relative;
}
.raz input ~ span {
position: absolute;
bottom: 0;
left: 2px;
opacity: .5;
transition: .2s;
}
.raz input:focus ~ span,
.raz input:not(:placeholder-shown) ~ span { /* когда будет хорошая поддержка :placeholder-shown браузерами */
bottom: 100%;
opacity: 1;
font-size: 80%;
}
</style>
<label class="raz"><input type="email" placeholder=" "><span>Email</span></label>
<style>
.raz {
position: relative;
}
.raz span {
position: absolute;
bottom: 50%;
left: 2px;
opacity: 0;
visibility: hidden;
transition: .3s;
}
.raz input:not(:placeholder-shown) ~ span {
bottom: 100%;
opacity: 1;
visibility: visible;
}
</style>
<label class="raz"><input type="email" placeholder="Email"><span>Email</span></label>
Плавающие метки неоднородны с метками элементов других типов формы. Их менее контрастный цвет хуже различим. [medium.com]
Эффект placeholder для div
Атрибут placeholder работает только для input и textarea, даже если у других тегов указан атрибут contenteditable. [whatwg.org]
<style>
.raz {
height: 3em;
border: 1px solid;
}
</style>
<div contentEditable placeholder="Можно ввести текст" class="raz"></div>
<style>
.raz {
height: 3em;
border: 1px solid;
}
.raz:empty:not(:focus)::before { /* хак: если div задать и placeholder, то и эта запись будет работать .raz:empty:not(:placeholder-shown)::before */
content: attr(data-placeholder);
opacity: .5;
}
</style>
<div contentEditable data-placeholder="Можно ввести текст" class="raz"></div>
Древний метод на память, изменяющий value JavaScript
<input onblur="this.value=(this.value=='')?this.title:this.value;" onfocus="this.value=(this.value==this.title)?'':this.value;" value="Email" title="Email" />
6 комментариев:
Поэтому я везде дополнительно пихаю такой вот код:
::-moz-placeholder, ::-webkit-input-placeholder, :-ms-input-placeholder {
color: inherit;
opacity: 0.5;
}
Если что, это можно скопировать в основную статью :)
::-webkit-input-placeholder { }
input:-ms-input-placeholder { }
input::-ms-input-placeholder { }
input:-moz-placeholder { }
input::-moz-placeholder { }
input::placeholder { }
Чтобы автоматически добавлялись всякие такие браузерные вариации, люди придумали препроцессоры CSS (которые берут файлы на своём языке и создают на их основе CSS) и постпроцессоры (которые работают на основе простого CSS и делают его ещё круче). Из последних известен PostCSS, из первых я предпочитаю Stylus. Надо во всём этом разбираться, да, но когда разберёшься и наделаешь себе шаблонов проектов — всё идёт на поток и на конфигурацию этих радостей современного интернета не обращаешь внимание :)
В общем, теперь, если будет свободное время, ты знаешь, на что его ещё можно потратить :D
пытался сформировать стиль для использования в Contact form7 WordPress, но ничего не получилось :( Там плагин оборачивает input служебным span и использовать селектор типа ~span или ещё какой-нибудь с ~ нет возможности :(. Не получается привязаться к событию input:focus :(
Есть какие-нибудь идеи без java?
От браузеров ждут селектор с доступом от элемента к его родителю, но его на сегодняшний день не реализовали.
Отправить комментарий