Плейсхолдер – елемент поля введення, у якому можна розмістити підказку. Коли користувач починає вводити дані, допоміжний текст зникає, щоб не заважати. Кожен браузер має свою думку щодо того, як слід відображати цей елемент, і часом дефолтні стилі ламають весь дизайн. Щоб керувати ними, потрібно скористатися спеціальним правилом CSS placeholder.
Де знаходиться плейсхолдер?
Проблема в тому, що підказка поля введення надійно захована в тіньовому DOM, і добратися до неї не так просто. Для цього використовується спеціальний нестандартний псевдоелемент CSS::placeholder. З його допомогою можна керувати властивостями підказки.
You will be interested:
Стилізація placeholder на CSS виглядає так:
input::placeholder ( color: red; opacity: 1; font-style: italic; )
Підтримка браузерами
Псевдоелемент CSS placeholder добре обробляється всіма сучасними браузерами, а для підтримки старих оглядачів можна скористатися префіксами:
- ::-webkit-input-placeholder – для webkit-браузерів (Safari, Chrome, Opera);
- ::-moz-placeholder – для браузерів Firefox вище 19 версії;
- :-moz-placeholder – для старих Firefox;
- :-ms-input-placeholder - для Internet Explorerвище 10 версії.
Як видно, старі браузери Mozilla, а також IE вважають placeholder CSS-псевдокласом, а не псевдоелементом. Не будемо з ними сперечатися, просто зважимо на цей аспект при стилізації поля введення.
Можливості стилізації
Для псевдоелемента placeholder в CSS можна встановити наступні параметри:
- фон - група background-властивостей. Фон блоку підказки поширюється по всьому полі введення. Можна задати як колір (background-color), а й зображення (background-image).
- колір тексту – color;
- прозорість – opacity;
- підкреслення, надкреслення або закреслення – text-decoration;
- регістр – text-transform;
- внутрішні відступи - padding. Підтримується не всіма браузерами. Як для малих елементів, верхній та нижній відступи ігноруються.
- відображення шрифту - властивості групи font, line-height та різноманітні відступи (text-indent, letter-spacing, word-spacing);
- вертикальне вирівнювання у рядку - vertical-align;
- обрізка тексту при переповненні контейнера – text-overflow.
Input1::placeholder ( background-image: linear-gradient(lime, blue); color: white; ) .input2::placeholder ( text-decoration: line-through; ::placeholder ( font-size: 16px; letter-spacing: 10px; ) .input4::placeholder ( background: brown; color: white; text-overflow: ellipsis; )
У фокусі
За замовчуванням підказка зникає з поля введення лише в тому випадку, якщо введено хоча б один символ. Але псевдоелемент CSS placeholder дозволяє реалізувати зникнення відразу при фокусуванні на полі. Для цього необхідно поєднати його із псевдокласом: focus.
input:focus::placeholder ( color: transparent; )
У деяких браузерах можна анімувати зміну ряду властивостей плейсхолдера за допомогою інструкції transition.
input::placeholder ( color: black; transition: color 1s; ) input:focus::placeholder ( color: white; )
У браузері Google Chromeколір підказки при фокусуванні на такому полі плавно змінюватиметься протягом однієї секунди.
Placeholders, які швиденько вирізані з тексту елементів всередині, може бути ніби в стилі. Fortunately we"ve sourced a short but ефективні CSS solution до style your input"s placeholder текст будь-якого кольору і небезпечності ви. Read on for the code.
Changing placeholder text color
Let"s start with a simple input and some placeholder text, for this example we"ll use the word "search" but you can use anything you want. The basic HTML is below:
HTML
Input (and textarea) placeholder text defaults до світлого кольору, як, якщо можна змінити те, що з кількома лініями CSS. Тут ми можемо завантажити текст, використовуючи HTML-колір name, але будь-який колір методу виходу (HEX, RGB, HSL).
CSS
::-webkit-input-placeholder ( /* Chrome */ color: red; ) :-ms-input-placeholder ( /* IE 10+ */ color: red; ) ::-moz-placeholder ( /* Firefox 19 + */ color: red; opacity: 1; ) :-moz-placeholder ( /* Firefox 4 - 18 */ color: red; opacity: 1; )Очевидно, що це важливо, щоб включати різні повноваження fixs in order to support as browsers as possible.
Changing placeholder focus text color
Правильно, ми успішно змінювали кольори місцезнаходження тексту на чорний, але це буде добре, якщо миттєво завантажені, коли ваші кнопки всередині нашого повідомлення. on focus.
CSS
input (outline: none; padding: 12px; border-radius: 3px; border: 1px solid black;) ::-webkit-input-placeholder ( /* Chrome */ color: red; transition: opacity 250ms ease-in-out ; ) :focus::-webkit-input-placeholder ( opacity: 0.5; ) :-ms-input-placeholder ( /* IE 10+ */ color: red; transition: opacity 250ms ease-in-out; ) :focus :-ms-input-placeholder ( opacity: 0.5; ) ::-moz-placeholder ( /* Firefox 19+ */ color: red; opacity: 1; transition: opacity 250ms ease-in-out; ) :focus:: -moz-placeholder ( opacity: 0.5; ) :-moz-placeholder ( /* Firefox 4 - 18 */ color: red; opacity: 1; transition: opacity 250ms ease-in-out; ) :фокус:-moz-placeholder ( opacity: 0.5; )У тексті вище ми бачимо кілька основних стилів на вхіді йогоself, і посилаються на перехід на оpacity, щоб зробити життєвий добрий nicer.
Плейсхолдер – елемент поля введення, у якому можна розмістити підказку. Коли користувач починає вводити дані, допоміжний текст зникає, щоб не заважати. Кожен браузер має свою думку щодо того, як слід відображати цей елемент, і часом дефолтні стилі ламають весь дизайн. Щоб керувати ними, потрібно скористатися спеціальним правилом CSS placeholder.
Де знаходиться плейсхолдер?
Проблема в тому, що підказка поля введення надійно захована в тіньовому DOM, і добратися до неї не так просто. Для цього використовується особливий нестандартний ::placeholder. З його допомогою можна керувати властивостями підказки.
Стилізація placeholder на CSS виглядає так:
Input::placeholder ( color: red; opacity: 1; font-style: italic; )
Підтримка браузерами
Псевдоелемент CSS placeholder добре обробляється всіма сучасними браузерами, а для підтримки старих оглядачів можна скористатися префіксами:
- ::-webkit-input-placeholder – для webkit-браузерів (Safari, Chrome, Opera);
- ::-moz-placeholder – для браузерів Firefox вище 19 версії;
- :-moz-placeholder – для старих Firefox;
- :-ms-input-placeholder – для Internet Explorer вище 10 версії.
Як видно, старі браузери Mozilla, а також IE вважають placeholder CSS-псевдокласом, а не псевдоелементом. Не будемо з ними сперечатися, просто зважимо на цей аспект при стилізації поля введення.
Можливості стилізації
Для псевдоелемента placeholder в CSS можна встановити такі параметри:
- фон - група блоку підказки поширюється по всьому полі введення. Можна задати як колір (background-color), а й зображення (background-image).
- колір тексту – color;
- прозорість – opacity;
- підкреслення, надкреслення або закреслення – text-decoration;
- регістр – text-transform;
- внутрішні відступи - padding. Підтримується не всіма браузерами. Як для малих елементів, верхній та нижній відступи ігноруються.
- відображення шрифту - властивості групи font, line-height та різноманітні відступи (text-indent, letter-spacing, word-spacing);
- вертикальне вирівнювання у рядку - vertical-align;
- обрізка тексту при переповненні контейнера – text-overflow.
У фокусі
За замовчуванням підказка зникає з поля введення лише в тому випадку, якщо введено хоча б один символ. Але placeholder дозволяє реалізувати зникнення відразу при фокусуванні на полі. Для цього необхідно поєднати його із псевдокласом: focus.
Input:focus::placeholder ( color: transparent; )
У деяких браузерах можна анімувати зміну ряду властивостей плейсхолдера за допомогою інструкції transition.
Input::placeholder ( color: black; transition: color 1s; ) input:focus::placeholder ( color: white; )
В браузері Google Chrome колір підказки при фокусуванні на такому полі плавно змінюватиметься протягом однієї секунди.
Атрибут placeholder використовується для створення підказок усередині порожніх полів введення (теги і
Почнемо з прикладу для тих, хто ще не знає, що таке плейсхолдер і як його використовувати:
Під час створення інтерфейсів слід враховувати особливості поведінки плейсхолдерів. Текст плейсхолдера зникає, як починається введення. Саме тому не варто використовувати їх для передачі інформації про поле введення (скільки і які саме символів воно повинно містити). Для цих цілей найкраще використовувати тег
Стилізація
Для стилізації плейсхолдерів використовуються такі правила:
::-webkit-input-placeholder ( color : blue ; ) ::-moz-placeholder ( color : blue ; ) /* Firefox 19+ */ :-moz-placeholder ( color : blue ; ) /* Firefox 18- * / :-ms-input-placeholder ( color : blue ; )Виглядає жахливо, чи не так? І на це є причина – досі CSS правила для плейсхолдерів не були стандартизовані та імплементація у кожному браузері різна. Докладніше про всі необхідні префікси можна дізнатися на caniuse.
Якщо ви використовуєте CSS-препроцесор, то, швидше за все, для застосування стилів до плейсхолдерів вам буде найзручніше написати простий міксин. Приклад на Sass:
@mixin placeholder ( & : :- webkit-input-placeholder ( @content ; ) & : - moz-placeholder ( @content ; ) & : :- moz-placeholder ( @content ; ) & : - ms-input-placeholder ( @content ; ) )Залежно від контексту міксин можна використовувати як для глобального застосування стилів, так і для окремих елементів (спробуйте на SassMeister):
// Глобально для кожного поля введення@include placeholder (color: blue;) // Для певних полів уведення.input ( @include placeholder ( color : green ; ) )Приклад
Синій текст для плейсхолдера (ніколи так не робіть):
.blue-text ::-webkit-input-placeholder ( color : #2e8ece ; ) .blue-text :-moz-placeholder ( color : #2e8ece ; ) .blue-text ::-moz-placeholder ( color : #2e8ece ; ) .blue-text :-ms-input-placeholder ( color : #2e8ece ; )
Підтримувані властивості
Не кожну властивість CSS можна використовувати з плейсхолдерами. Ось повний списокпідтримуваних властивостей:
- font і всі пов'язані властивості (font-size, font-family і т.д.)
- background і всі пов'язані властивості (background-color, background-image тощо)
- opacity
- text-indent
- text-overflow
- color
- text-transform
- line-height
- word-spacing
- letter-spacing
- text-decoration
- vertical-align
Анімації
Ідеї анімацій належить блогу html5.by.
Всі наступні приклади написані з використанням препроцесора Sass. До кожного додається посилання на SassMeister, за яким ви зможете знайти скомпільований CSS код.
Швидше за все, ви захочете використовувати анімації до плейсхолдерів при фокусі на полі введення. Робиться це досить просто. Достатньо всього кілька разів використовувати написаний раніше міксин placeholder:
.input ( @include placeholder ( // Стилі для нормального стану) & :focus ( @include placeholder ( // Стилі після події focus } } }Зміна прозорості
.input ( @include placeholder ( color : #aaa ; opacity : 1 ; transition : opacity 300ms ; ) & : focus ( @include placeholder ( opacity : 0 ; ) ) )
Зсув праворуч і ліворуч
Чим більша ширина поля введення, тим більше має бути значення властивості text-indent. Для стандартного поля введення буде достатньо 500px, для ширших варто підбирати вручну. Від ширини поля введення та значення text-indent залежить швидкість анімації. Для зсуву вліво потрібно використовувати негативні значення, наприклад -500px.
Зрушення вниз
Як і в минулому прикладі анімація залежить від розмірів воля введення, але в цьому випадку увагу звернути на висоту. Для переважної більшості полів введення шукане значення line-height перебуватиме в межах 100px. На жаль, за допомогою властивості line-height неможливо реалізувати ефект зсуву вгору, оскільки властивість не набуває негативних значень.
.input ( @include placeholder ( text-indent : 0px ; transition : text-indent 300ms ; ) & :focus ( @include placeholder ( text-indent : 500px ; ) ) )
Всі разом
Щоб використовувати код анімацій для плейсхолдерів, було приємно і зручно, можна написати невелику бібліотеку міксинів для будь-якого препроцесора. Бібліотека виглядає так ():
@mixin placeholder ( & : :- webkit-input-placeholder ( @content ) & : - moz-placeholder ( @content ) & : :- moz-placeholder ( @content ) & : - ms-input-placeholder ( @content ) ) @mixin pl-shift ($side : left , $position : 500px , $duration : 200ms ) ( @include placeholder ( text-indent : 0 ; transition : text-indent $duration ; ) & :focus ( @include placeholder ( text-indent : if ($side == left , - $position , $position ); ) ) ) @mixin pl-slide-down ($position : 5 , $duration : 200ms ) ( @include placeholder ( line-height : 1 ; transition : line-height $duration ; ) & :focus ( @include placeholder ( line-height : $position ; ) ) ) @mixin pl-fade-out ($duration : 200ms ) ( @include placeholder ( opacity : 1 transition : opacity $duration ; ) & :focus ( @include placeholder ( opacity : 0 ; ) ) )Використовувати її дуже просто. Достатньо підключити бажаний міксин до будь-якого поля введення або просто створити одне глобальне правило для всіх пэйсхолдерів на сторінці:
// Для окремих елементів.pl-shift-right ( @include pl-shift ( right ); ) .pl-fade-out ( @include pl-fade-out ; ) // Для решти@include pl-shift (left);Autoprefixer
Якщо ви не використовуєте препроцесор і все ще не хочете, щоб ваш вихідний CSS файл перетворився на кашу з префіксів для всіх можливих браузерів, зверніть увагу на Autoprefixer . З його допомогою чистий CSS можна зробити брудним (але вже в іншому файлі), додавши всі необхідні префікси всім властивостям. Щоб змусити плагін працювати з пэйсхолдерами, достатньо використовувати псевдоелемент::placeholder:
::placeholder (color: orange;). input : : placeholder ( color : blue ; )Після парсингу стилів Autoprefixer створить окремий CSS файл, в якому пропише всі необхідні префікси для всіх вказаних вами браузерів.
Що далі
Як я вже писав вище, все, що пов'язане із застосуванням стилів до плейсхолдерів ще не стандартизовано. Незабаром це виправлять. У специфікацію Selector Level 4 був доданий псевдоклас:placeholder-shown, який, нарешті, приведе до стандарту всю ту шалену суміш із псевдокласів та псевдоелементів, яка існує зараз. Слідкувати за підтримкою можна на caniuse (зараз не підтримується в жодному браузері).
Застосовувати стилі за допомогою:placeholder-shown буде набагато простіше:
.input :placeholder-shown ( color : blue ; )