Исчезающий placeholder при фокусе

Атрибут placeholder применяется для призыва к действию внутри пустых элементов input и textarea. Если мы посмотрим html-справочник, то найдем там следующее описание – выводит текст внутри поля формы, который исчезает при получении фокуса или при наборе текста. Обычно отображается серым цветом.

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

:focus::-webkit-input-placeholder {
  color: transparent
}

:focus::-moz-placeholder {
  color: transparent
}

:focus:-moz-placeholder {
  color: transparent
}

:focus:-ms-input-placeholder {
  color: transparent
}

Скрываем 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;}

Сдвиг вправо

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;}

Сдвиг вниз

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;}

Поддержка устаревшими браузерами

Сейчас placeholder работает только в современных браузерах, но существует JS плагин, который позволяет не изобретая велосипедов делать этот атрибут кроссбраузерным – placeholder.js

3 ответа к «Исчезающий placeholder при фокусе»

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

  2. Спасибо, очень помогло. Я изучаю разработку, и в задании надо было убрать текст в поисковой строке при :active, и это помогло:
    input:active::placeholder {
    opacity: 0;
    transition: opacity 0.3s ease;
    }

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *