Исчезающий 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
Спасибо! Поняла что это нужно, когда в метрике увидела, как пользователь в недоумении кликает по полю ввода в корзине десяток раз. Видимо для некоторых непонятно наличие текста там, куда его нужно вводить..
Спасибо, очень помог код из начала статьи
Спасибо, очень помогло. Я изучаю разработку, и в задании надо было убрать текст в поисковой строке при :active, и это помогло:
input:active::placeholder {
opacity: 0;
transition: opacity 0.3s ease;
}