Как сделать чтобы placeholder исчезал при нажатии

Добавил пользователь Владимир З.
Обновлено: 05.10.2024

Используйте псевдоэлемент ::placeholder для стилизации дефолтного текста в элементе input или textarea . Большинство современных браузеров поддерживают это, но для старых браузеров требуются префиксы.

Префиксы

Используемый мной синтаксис поддерживается большинством современных браузеров:

Но для более старых браузеров вам нужно будет использовать префиксы поставщика.

Вау! Я знаю, это огромный список. И вы можете заметить довольно много разных вариантов реализации. Итак, давайте разберем эти различия и поймем, что здесь происходит.

Псевдоэлемент против псевдокласса

Вы можете заметить, что я использую двойное двоеточие :: . Это называется псевдоэлементом и было введено в CSS3. Если бы мы использовали одно двоеточие : , это назвали бы псевдоклассом.

Поскольку псевдоэлемент, :: был представлен в CSS3, а не в более ранних версиях CSS, некоторые старые браузеры, такие как Internet Explorer, просто никогда не поддерживали его. Принимая во внимание, что псевдокласс, : был представлен ранее (в CSS1 и CSS2). Вот почему гораздо больше браузеров, включая Internet Explorer, поддерживают его.

Следовательно, в нашем ::placeholder префиксе поставщика вы будете использовать смесь псевдокласса и псевдоэлемента.

Непрозрачность Placeholder в Firefox по умолчанию

Хорошо, с чем это связано opacity: 1 для Firefox. Это потому, что по умолчанию для placeholder Firefox применяется значение непрозрачности. Таким образом, чтобы переопределить это, мы должны установить его принудительно. Таким образом, наш placeholder будет отображаться и не будет иметь блеклого внешнего вида по умолчанию.

CSS-обработка неверных селекторов

Таким образом, вы также можете подумать, почему мы не просто сгруппировали все префиксы вендоров вместе как в примере ниже:

Ну, это потому, что в CSS3 было правило, которое гласит:

группа селекторов, содержащая недопустимый селектор, недействительна.

Давайте посмотрим на пример, чтобы увидеть, что это значит. Вот правильный CSS-селектор

Так что в нашем HTML это будет выглядеть как ожидалось

Но что произойдет, если мы добавим неверный селектор CSS

Так как в группе есть недопустимый селектор CSS. Вся группа будет считаться недействительной, и стилизация не будет применена.

Вот почему нам нужны отдельные правила для каждого браузера. В противном случае вся группа будет игнорироваться всеми браузерами.

⭐️ НО! похоже, это можно изменить в CSS4.

Как правило, если в цепочке или группе селекторов присутствует недопустимый псевдоэлемент или псевдокласс, весь список селекторов является недействительным. Если псевдоэлемент (но не псевдокласс) имеет префикс -webkit-, то по состоянию на Firefox 63 браузеры Blink, Webkit и Gecko предполагают, что он действителен, не аннулирует список выбора.

Поддерживаемые стили

Вот список всех стилей, которые вы можете применить к вашему placeholder:

  • background свойства
  • color
  • font свойства
  • letter-spacing
  • line-height
  • opacity
  • text-decoration
  • text-indent
  • text-transform
  • vertical-align
  • word-spacing

Проблемы доступности

Способность стилизовать заполнители - это круто. Но мне нужно отметить кое-что действительно важное - текст-заполнитель не заменяет элемент метки !! Я был виновен в этом, когда впервые попал в веб-программирование 🙁. Когда ваша форма основана исключительно на инструкциях-заполнителях без меток, это очень вредно для доступности. Доступность важна не только для того, чтобы сделать ваш веб-сайт доступным для всех, но и для повышения удобства работы пользователей. И, в конечном итоге, создание лучшего сайта или веб-приложения.

Вот действительно потрясающая статья о том, как использовать заполнители без каких-либо меток. Ниже приведены три основных тезиса:

Автоматически добавлять Vendor-префиксы

Если вы не хотите иметь дело со всеми префиксами вендоров, вы можете использовать PostCSS с плагином Autoprefixer . Этот плагин будет анализировать ваш CSS и добавлять префиксы.

Сдвигающийся плейсхолдер

Данное решение выполнено через псевдокласс :placeholder-shown , который отображает текст подсказки, заданной атрибутом placeholder .

Пример:

Атрибут placeholder является пустым, но он необходим, чтобы можно было использовать его псевдокласс :placeholder-shown , при отсутвиии которого можно сдвинуть элемент куда угодно.



Многие из вас нередко сталкивались с формами, где в качестве подсказок есть подписи. Они пропадают при на наборе текста. Так вот - это атрибут placeholder, который есть у элементов, которые созданы для ввода текста (input). С помощью него можно задать текст, который будет отображаться как подсказка до начала ввода в данное поле. К сожалению, не все браузеры одинаково корректно работают с данным атрибутом. Устаревшие версии и вовсе данный текст не отображают.

Напомню, по статистике в Рунете устаревшими браузерами пользуется около 5% пользователей (это для очистки совести, если что). Надеюсь на ваших сайтах они не концентрируются)

Теперь рассмотрим как сделать так, чтобы решить нижеописанные проблемы:

1. Как изменить стили для плейсхолдера;
2. Как скрыть текст плейсхолдера не при вводе, а уже при нажатии на поле;
3. Что делать с браузерами, где в принципе не отображается placeholder.

Во всех примерах будем работать с полем input.

Как изменить цвет текста-подсказки в placeholder в input?

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

По умолчанию во многих браузерах цвет подсказки - серый. В данном примере сделаем его чёрным.

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

И да, можно использовать для указания этих свойств классы. Смотрим ниже:

Убираем placeholder при нажатии на поле

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

Можно даже настроить плавное изменение прозрачности или изменение цвета сss-анимацией. Но с кроссбраузерностью таких решений могут возникнуть проблемы.

А что делать с бразуерами, которые не поддерживают атрибут placeholder в input?

Ну точно не теряться) Да, действительно, такие браузеры есть. Например, IE8. И да, есть люди-адепты, которые будут им пользоваться всегда. Если нужна составить решение для всех посетителей, то наберитесь ещё немного терпения.

Для решения этой проблемы скачайте популярный для этого jquery плагин - jquery.placeholder. Ссылок давать не буду, так как сегодня-завтра они изменятся. Но, если что, можете скачать рабочий пример с плагином в - скачать исходники.

Подключаем его. Не стоит забывать, что нужен ещё и в принципе jquery подключить.

В этом примере возьмём текстовое поле input и закрепим к нему стили.

Изменение цвета placeholder


Убираем placeholder при нажатии на поле

Все браузеры по умолчанию должны скрывать placeholder, что можно увидеть, только когда начнешь печатать текст Но можно сделать сделать так, чтоб он исчезал сразу, как только навели курсор и сделали клик, что надпись исчезает. Здесь нужно прописать стиль, что подсказку сделает полностью прозрачной.


Скрытие placeholder при наведение можно сделать по разному, как пример, это плавно изменяя прозрачность или палитру цвета.

Перемещение placeholder над полем ввода при фокусе

На этом уроке вы узнаете, как заставить placeholder не исчезать, а переместится наверх при заполнении поля формы.

HTML разметка

Форма состоит из двух текстовых полей и кнопки "Подписаться". Для создания кнопки так же используется поле input, но с типом "submit".

Premium Subscription

CSS стили

Поместим нашу форму в белый контейнер и выровняем по центру экрана.

Перемещение placeholder над полем ввода при фокусе.

Далее красиво оформим поля формы.

На картинке ниже, стрелочками обозначены Full Name и Email Address. Это и есть placeholder, что значит заполнители. Когда пользователь начинает заполнять форму, эти надписи исчезают. В этом нет ничего страшного, но было бы немного комфортнее, если надписи остаются в поле зрения.

Перемещение placeholder над полем ввода при фокусе.

Перемещение placeholder-ов.

В состоянии фокуса, произошло перемещение вверх.

Перемещение placeholder над полем ввода при фокусе.

Стилизация кнопки

Перемещение placeholder над полем ввода при фокусе.

Посмотрите пример на CodePen


Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Читайте также: