Placeholder е елемент от полето за въвеждане, в което може да се постави подсказка. Когато потребителят започне да въвежда данни, поддържащият текст изчезва, за да не пречи. Всеки браузър има собствено мнение за това как трябва да се показва този елемент и понякога стиловете по подразбиране нарушават целия дизайн. За да ги управлявате, трябва да използвате специално CSS placeholder правило.
Къде е контейнерът?
Проблемът е, че подсказката на полето за въвеждане е здраво скрита в сенчестия DOM и не е толкова лесно да се стигне до нея. За целта се използва специален нестандартен CSS::placeholder псевдоелемент. С негова помощ можете да управлявате свойствата на подсказката.
Ще ви бъде интересно:
Оформянето на контейнер в CSS изглежда така:
input::placeholder ( цвят: червен; непрозрачност: 1; стил на шрифта: курсив; )
Поддръжка на браузър
Псевдоелементът CSS placeholder се обработва добре от всички модерни браузъри, а за поддръжка на по-стари браузъри можете да използвате префиксите:
- ::-webkit-input-placeholder - за уебкит браузъри (Safari, Chrome, Opera);
- ::-moz-placeholder - за Firefox браузъринад версия 19;
- :-moz-placeholder - за по-стар Firefox;
- :-ms-input-placeholder - за Internet Explorerнад версия 10.
Както можете да видите, по-старите браузъри на Mozilla, както и IE, считат контейнера за CSS псевдо-клас, а не за псевдо-елемент. Нека не спорим с тях, просто ще вземем предвид този аспект, когато стилизираме полето за въвеждане.
Опции за стилизиране
Псевдоелементът заместител в CSS може да бъде зададен на следните параметри:
- фон - група свойства на фона. Фонът на блока с подсказки се отнася за цялото поле за въвеждане. Можете да зададете не само цвета (background-color), но и изображението (background-image).
- цвят на текста - цвят;
- прозрачност - непрозрачност;
- подчертаване, надчертаване или зачертаване - текст-украса;
- случай - преобразуване на текст;
- вътрешни отстъпи - padding. Не се поддържа от всички браузъри. Както при вградените елементи, подложките отгоре и отдолу се игнорират.
- показване на шрифт - свойства на групата шрифтове, височина на реда и различни отстъпи (текст-отстъп, междубуквени интервали, междусловни интервали);
- вертикално подравняване в ред - vertical-align;
- изрязване на текст при препълване на контейнера - text-overflow.
Input1::placeholder (фоново изображение: линеен градиент (лайм, синьо); цвят: бяло; ) .input2::placeholder (text-decoration: line-through; цвят: лилав; font-weight: получер; ) .input3 ::placeholder (размер на шрифта: 16px; разстояние между буквите: 10px;) .input4::placeholder (фон: кафяв; цвят: бял; text-overflow: многоточие;)
На фокус
По подразбиране подсказката изчезва от полето за въвеждане само ако в него е въведен поне един символ. Но псевдоелементът CSS placeholder ви позволява да внедрите избледняване веднага, когато фокусирате върху полето. За да направите това, трябва да го комбинирате с псевдо-класа: фокус.
input:focus::placeholder ( цвят: прозрачен; )
В някои браузъри е възможно да се анимират промени в редица свойства на контейнери с помощта на оператора за преход.
input::placeholder ( цвят: черен; преход: цвят 1s; ) input:focus::placeholder ( цвят: бял; )
В браузъра Google ChromeКогато фокусирате върху такова поле, цветът на подсказката ще се промени плавно в рамките на една секунда.
Заместителите, онези текстови елементи, които често са оцветени в сиво във входа, могат да бъдат болезнени за стилизиране. За щастие ние намерихме кратко, но ефективно CSS решение за стилизиране на текста на контейнера във вашия вход във всеки цвят и непрозрачност, които желаете. Прочетете за кода.
Промяна на цвета на текста на контейнера
Нека започнем с просто въвеждане и малко текст на контейнера, за този пример ще използваме думата „търсене“, но вие можете да използвате всичко, което искате. Основният HTML е по-долу:
HTML
Текстът на контейнера за въвеждане (и текстово поле) е по подразбиране със светлосив цвят, но можем да променим това с няколко реда CSS. Тук ще оцветим въведения текст в червено, като използваме HTML име на цвят, но всеки метод на оцветяване ще е достатъчен (HEX, RGB, HSL).
CSS
::-webkit-input-placeholder ( /* Chrome */ цвят: червен; ) :-ms-input-placeholder ( /* IE 10+ */ цвят: червен; ) ::-moz-placeholder ( /* Firefox 19 + */ цвят: червен; непрозрачност: 1; ) :-moz-placeholder ( /* Firefox 4 - 18 */ цвят: червен; непрозрачност: 1; )Обърнете внимание, че е важно да включите различните префикси на доставчиците, за да поддържате възможно най-много браузъри. Само текстът на контейнера за въвеждане на текст на Firefox е по подразбиране с лека прозрачност, така че не е необходимо да задавате свойството за непрозрачност в IE или Chrome.
Промяна на цвета на текста на фокуса на заместителя
Добре, успешно сменихме цвета на текста на контейнера на червено, но би било хубаво, ако нещо се случи, когато потребител кликне вътре в нашия вход. Използвайки същите свойства на CSS с префикс на доставчика, можем да променим непрозрачността на текста на контейнера на входа на фокус.
CSS
вход (очертание: няма; подложка: 12px; border-radius: 3px; border: 1px плътно черно; ) ::-webkit-input-placeholder ( /* Chrome */ цвят: червен; преход: непрозрачност 250ms улесняване на излизане ; ) :focus::-webkit-input-placeholder (непрозрачност: 0,5; ) :-ms-input-placeholder ( /* IE 10+ */ цвят: червен; преход: непрозрачност 250ms ease-in-out; ) :focus :-ms-input-placeholder (непрозрачност: 0,5; ) ::-moz-placeholder ( /* Firefox 19+ */ цвят: червен; непрозрачност: 1; преход: непрозрачност 250ms леко влизане навън; ) :focus:: -moz-placeholder ( непрозрачност: 0,5; ) :-moz-placeholder ( /* Firefox 4 - 18 */ цвят: червен; непрозрачност: 1; преход: непрозрачност 250ms леко влизане навън; ) :focus:-moz-placeholder (непрозрачност: 0,5; )В примера по-горе добавихме няколко основни стила към самия вход и добавихме преход към непрозрачността, за да направим изживяването малко по-приятно. Вижте демонстрацията и експериментирайте с други CSS свойства и преходи.
Placeholder е елемент от полето за въвеждане, в което може да се постави подсказка. Когато потребителят започне да въвежда данни, поддържащият текст изчезва, за да не пречи. Всеки браузър има собствено мнение за това как трябва да се показва този елемент и понякога стиловете по подразбиране нарушават целия дизайн. За да ги управлявате, трябва да използвате специално CSS placeholder правило.
Къде е контейнерът?
Проблемът е, че подсказката на полето за въвеждане е здраво скрита в сенчестия DOM и не е толкова лесно да се стигне до нея. За целта се използва специален нестандартен ::placeholder. С негова помощ можете да управлявате свойствата на подсказката.
Оформянето на контейнер в CSS изглежда така:
Input::placeholder ( цвят: червен; непрозрачност: 1; стил на шрифта: курсив; )
Поддръжка на браузър
Псевдоелементът CSS placeholder се обработва добре от всички съвременни браузъри и за поддръжка на по-стари браузъри можете да използвате следните префикси:
- ::-webkit-input-placeholder - за уебкит браузъри (Safari, Chrome, Opera);
- ::-moz-placeholder - за браузъри Firefox над версия 19;
- :-moz-placeholder - за по-стар Firefox;
- :-ms-input-placeholder - за Internet Explorer над версия 10.
Както можете да видите, по-старите браузъри на Mozilla, както и IE, считат контейнера за CSS псевдо-клас, а не за псевдо-елемент. Нека не спорим с тях, просто ще вземем предвид този аспект, когато стилизираме полето за въвеждане.
Опции за стилизиране
Можете да зададете следните опции за псевдоелемента на заместителя в CSS:
- фон - блоковата група с подсказки се прилага към цялото поле за въвеждане. Можете да зададете не само цвета (background-color), но и изображението (background-image).
- цвят на текста - цвят;
- прозрачност - непрозрачност;
- подчертаване, надчертаване или зачертаване - текст-украса;
- случай - преобразуване на текст;
- вътрешни отстъпи - padding. Не се поддържа от всички браузъри. Както при вградените елементи, подложките отгоре и отдолу се игнорират.
- показване на шрифт - свойства на групата шрифтове, височина на реда и различни отстъпи (текст-отстъп, междубуквени интервали, междусловни интервали);
- вертикално подравняване в ред - vertical-align;
- изрязване на текст при препълване на контейнера - text-overflow.
На фокус
По подразбиране подсказката изчезва от полето за въвеждане само ако в него е въведен поне един символ. Но контейнерът ви позволява да приложите изчезването веднага, когато фокусирате върху полето. За да направите това, трябва да го комбинирате с псевдо-класа: фокус.
Input:focus::placeholder ( цвят: прозрачен; )
В някои браузъри е възможно да се анимират промени в редица свойства на контейнери с помощта на оператора за преход.
Input::placeholder ( цвят: черен; преход: цвят 1s; ) input:focus::placeholder ( цвят: бял; )
IN Google браузърЦветът на подсказката на Chrome при фокусиране върху такова поле ще се промени плавно в рамките на една секунда.
Атрибутът placeholder се използва за създаване на подсказки в празни полета за въвеждане (тагове И
Нека започнем с пример за тези, които все още не знаят какво е контейнер и как да го използвате:
Когато разработвате интерфейси, трябва да вземете предвид поведението на контейнерите. Текстът на контейнера изчезва веднага щом започне въвеждането. Ето защо не трябва да ги използвате за предаване на информация за самото поле за въвеждане (колко и какви символи трябва да съдържа). За тези цели е най-добре да използвате етикета
Стилизация
Следните правила се използват за стилизиране на контейнери:
::-webkit-input-placeholder ( цвят : син ; ) ::-moz-placeholder ( цвят : син ; ) /* Firefox 19+ */ :-moz-placeholder ( цвят : син ; ) /* Firefox 18- * / :-ms-input-placeholder (цвят: син;)Изглежда ужасно, нали? И има причина за това - досега CSS правилата за placeholders не са стандартизирани и имплементацията е различна във всеки браузър. Повече информация за всички необходими префикси можете да намерите на caniuse.
Ако използвате CSS препроцесор, вероятно ще ви е най-удобно да напишете прост миксин, за да приложите стилове към контейнери. Пример в Sass:
@mixin placeholder ( & : :- webkit-input-placeholder ( @content ; ) & : - moz-placeholder ( @content ; ) & : :- moz-placeholder ( @content ; ) & : - ms-input-placeholder ( @съдържание ;))В зависимост от контекста, mixin може да се използва за прилагане на стилове или глобално, или на базата на индивидуален елемент (изпробвайте го на SassMeister):
// Глобално за всяко поле за въвеждане@include контейнер (цвят: син;) // За конкретни полета за въвеждане.input (@include placeholder (цвят: зелен;))Пример
Син текст за заместител (никога не правете това):
.blue-text ::-webkit-input-placeholder ( цвят : #2e8ece ; ) .blue-text :-moz-placeholder ( цвят : #2e8ece ; ) .blue-text ::-moz-placeholder ( цвят : #2e8ece ; ) .blue-text :-ms-input-placeholder ( цвят : #2e8ece ; )
Поддържани свойства
Не всеки CSS свойствоможе да се използва с контейнери. Тук пълен списъкподдържани свойства:
- шрифт и всички свързани свойства (font-size, font-family и т.н.)
- фон и всички свързани свойства (фонов цвят, фоново изображение и т.н.)
- непрозрачност
- текст-отстъп
- текст-препълване
- цвят
- преобразуване на текст
- височина на линията
- разстояние между думите
- разстояние между буквите
- текст-украса
- вертикално подравняване
Анимации
Идеите за анимация принадлежат на блога html5.by.
Всички следващи примери са написани с помощта на препроцесора Sass. Всеки идва с връзка към SassMeister, където можете да намерите компилирания CSS код.
Най-вероятно ще искате да приложите анимации към контейнери, когато полето за въвеждане има фокус. Всичко това се прави съвсем просто. Достатъчно е само да използвате предварително написания placeholder mixin няколко пъти:
.input ( @include контейнер ( // Стилове за нормално състояние) & :focus ( @include контейнер ( // Стилове след фокусното събитие } } }Промяна на прозрачността
.input (@include контейнер (цвят: #aaa; непрозрачност: 1; преход: непрозрачност 300ms;) & :focus (@include контейнер (непрозрачност: 0;)))
Преместване надясно и наляво
Колкото по-широко е полето за въвеждане, толкова по-голяма трябва да бъде стойността на свойството text-indent. За стандартно поле за въвеждане ще са достатъчни 500px, за по-широки трябва да го изберете ръчно. Скоростта на анимацията зависи от ширината на полето за въвеждане и стойността на отстъпа на текста. За да преместите наляво, трябва да използвате отрицателни стойности, например -500px.
Преместване надолу
Както в предишния пример, анимацията зависи от размера на входа, но в този случай обърнете внимание на височината. За по-голямата част от полетата за въвеждане изискваната стойност на височината на реда ще бъде в рамките на 100px. За съжаление свойството line-height не може да се използва за създаване на ефект на изместване нагоре, тъй като свойството не приема отрицателни стойности.
.input ( @include placeholder ( text-indent : 0px ; преход : 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: ляво, $position: 500px, $duration: 200ms) ( @include placeholder (текст-отстъп: 0; преход: text-indent $duration;) & :focus ( @include placeholder ( text-indent: if ($side == ляво, - $position, $position); ) )) @mixin pl-slide-down ($position: 5, $duration: 200ms) ( @include placeholder (line-height: 1; преход: line-height $duration;) & :focus ( @include placeholder (line-height: $position; ))) @mixin pl-fade-out ($duration: 200ms) ( @include placeholder (opacity: 1) ; преход: непрозрачност $продължителност ;) & :focus ( @include placeholder (непрозрачност: 0; )))Много е лесен за използване. Достатъчно е да свържете желания миксин към което и да е поле за въвеждане или просто да създадете едно глобално правило за всички пейсхолдери на страницата:
// За отделни елементи.pl-shift-right ( @include pl-shift ( right ); ) .pl-fade-out ( @include pl-fade-out ; ) // За всичко останало@include pl-shift (ляво);Автопрефикс
Ако не използвате препроцесор и все пак не искате вашият CSS изходен файл да се превърне в бъркотия от префикси за всички възможни браузъри, тогава погледнете Autoprefixer. С негова помощ чистият CSS може да бъде направен мръсен (но в различен файл) чрез добавяне на всички необходими префикси към всички свойства. За да накарате приставката да работи с контейнери, просто използвайте псевдо-елемента::placeholder:
::заместител (цвят: оранжев;). input::placeholder(color:blue;)След анализиране на вашите стилове Autoprefixer ще създаде отделен CSS файл, в който ще запише всички необходими префикси за всички браузъри, които сте посочили.
Какво следва
Както писах по-горе, всичко, свързано с прилагането на стилове към заместители, все още не е стандартизирано. Това скоро ще бъде поправено. Спецификацията Selector Level 4 добави псевдо-клас: placeholder-shown, който най-накрая ще стандартизира лудата смес от псевдо-класове и псевдо-елементи, която съществува в момента. Можете да наблюдавате поддръжката на caniuse (в момента не се поддържа в нито един браузър).
Прилагането на стилове с :placeholder-shown ще бъде много по-лесно:
.input :placeholder-shown ( цвят : син ; )