Измените цвет заполнителя ввода HTML5 с помощью CSS
Chrome поддерживает атрибут placeholder на элементах input[type=text]
(другие, вероятно, тоже).
Но следующий CSS
ничего не делает со значением заполнителя:
input[placeholder], [placeholder], *[placeholder] {
color: red !important;
}
<input type="text" placeholder="Value">
Value
все равно останется grey
вместо red
.
Есть ли способ изменить цвет текста-заполнителя?
30 ответов:
Реализация
Существуют три различные реализации: псевдо-элементы, псевдоклассы и ничто.WebKit, Blink (Safari, Google Chrome, Opera 15+) и Microsoft Edge используют псевдо-элемент:
::-webkit-input-placeholder
. [Ref ]- Mozilla Firefox 4-18 использует псевдокласс:
:-moz-placeholder
(один двоеточие). [Ref ]- Mozilla Firefox 19+ использует псевдо-элемент:
::-moz-placeholder
, но старый селектор будет еще поработаю какое-то время. [Ref ]- Internet Explorer 10 и 11 используют псевдокласс:
:-ms-input-placeholder
. [Ref ]- апрель 2017: большинство современных браузеров поддерживают простой псевдо-элемент
::placeholder
[Ref]Internet Explorer 9 и ниже вообще не поддерживает атрибут
placeholder
, в то время какOpera 12 и ниже не поддерживают какой-либо CSS-селектор для заполнителей.Обсуждение о наилучшей реализации пока речь не идет. Обратите внимание, что псевдо-элементы действуют как реальные элементы в теневом DOM. A
padding
наinput
не получит тот же цвет фона, что и псевдо-элемент.CSS селекторы
Агенты пользователей должны игнорировать правило с неизвестным селектором. См. Раздел Уровень Селекторов 3:Группаселекторов, содержащая недопустимый селектор, является недопустимой.
Поэтому нам нужны отдельные правила для каждого браузера. В противном случае вся группа будет проигнорирована всеми браузерами.
::-webkit-input-placeholder { /* WebKit, Blink, Edge */ color: #909; } :-moz-placeholder { /* Mozilla Firefox 4 to 18 */ color: #909; opacity: 1; } ::-moz-placeholder { /* Mozilla Firefox 19+ */ color: #909; opacity: 1; } :-ms-input-placeholder { /* Internet Explorer 10-11 */ color: #909; } ::-ms-input-placeholder { /* Microsoft Edge */ color: #909; } ::placeholder { /* Most modern browsers support this now. */ color: #909; }
<input placeholder="Stack Snippets are awesome!">
Примечания
Будьте осторожны, чтобы избежать плохих контрастов. Заполнитель Firefox, по-видимому, по умолчанию с уменьшенной непрозрачностью, поэтому здесь необходимо использовать
opacity: 1
.- обратите внимание, что текст – заполнитель просто отсекается, если он не соответствует размеру входных элементов в
em
и тестирует их с большими настройками минимального размера шрифта. Не забывайте о переводах: некоторые языки нуждаются больше места для того же самого слова.- браузеры с поддержкой HTML для
placeholder
, но без поддержки CSS для этого (как Opera) также должны быть протестированы.- некоторые браузеры используют дополнительный CSS по умолчанию для некоторых типов
input
(search
). Это может повлиять на рендеринг неожиданным образом. Используйте свойства-webkit-appearance
и-moz-appearance
изменить это. Пример:[type="search"] { -moz-appearance: textfield; -webkit-appearance: textfield; appearance: textfield; }
/* do not group these rules */ *::-webkit-input-placeholder { color: red; } *:-moz-placeholder { /* FF 4-18 */ color: red; opacity: 1; } *::-moz-placeholder { /* FF 19+ */ color: red; opacity: 1; } *:-ms-input-placeholder { /* IE 10+ */ color: red; } *::-ms-input-placeholder { /* Microsoft Edge */ color: red; } *::placeholder { /* modern browser */ color: red; }
<input placeholder="hello"/> <br /> <textarea placeholder="hello"></textarea>
Это будет стиль всех
input
иtextarea
заполнителей.Важное примечание: не группируйте эти правила. Вместо этого создайте отдельное правило для каждого селектора (один недопустимый селектор в группе делает всю группу недействительной).
Вы также можете стилизовать текстовые области:
input::-webkit-input-placeholder, textarea::-webkit-input-placeholder { color: #636363; } input:-moz-placeholder, textarea:-moz-placeholder { color: #636363; }
В дополнение к ответу тошо я заметил некоторые несоответствия webkit между Chrome 9-10 и Safari 5 с поддерживаемыми свойствами CSS, которые стоит отметить.
В частности Chrome 9 и 10 не поддерживают
background-color
,border
,text-decoration
иtext-transform
при стилизации заполнителя.Полное кроссбраузерное сравнение находитсяздесь .
Для Sass пользователей:
// Create placeholder mixin @mixin placeholder($color, $size:"") { &::-webkit-input-placeholder { color: $color; @if $size != "" { font-size: $size; } } &:-moz-placeholder { color: $color; @if $size != "" { font-size: $size; } } &::-moz-placeholder { color: $color; @if $size != "" { font-size: $size; } } &:-ms-input-placeholder { color: $color; @if $size != "" { font-size: $size; } } } // Use placeholder mixin (the size parameter is optional) [placeholder] { @include placeholder(red, 10px); }
Это будет прекрасно работать. ДЕМОНСТРАЦИЯ ЗДЕСЬ:
input::-webkit-input-placeholder, textarea::-webkit-input-placeholder { color: #666; } input:-moz-placeholder, textarea:-moz-placeholder { color: #666; } input::-moz-placeholder, textarea::-moz-placeholder { color: #666; } input:-ms-input-placeholder, textarea:-ms-input-placeholder { color: #666; }
<input type="text" placeholder="Value" />
В Firefox и Internet Explorer обычный цвет входного текста переопределяет свойство color заполнителей. Итак, нам нужно
::-webkit-input-placeholder { color: red; text-overflow: ellipsis; } :-moz-placeholder { color: #acacac !important; text-overflow: ellipsis; } ::-moz-placeholder { color: #acacac !important; text-overflow: ellipsis; } /* For the future */ :-ms-input-placeholder { color: #acacac !important; text-overflow: ellipsis; }
Кроссбраузерное решение:
/* all elements */ ::-webkit-input-placeholder { color:#f00; } ::-moz-placeholder { color:#f00; } /* firefox 19+ */ :-ms-input-placeholder { color:#f00; } /* ie */ input:-moz-placeholder { color:#f00; } /* individual elements: webkit */ #field2::-webkit-input-placeholder { color:#00f; } #field3::-webkit-input-placeholder { color:#090; background:lightgreen; text-transform:uppercase; } #field4::-webkit-input-placeholder { font-style:italic; text-decoration:overline; letter-spacing:3px; color:#999; } /* individual elements: mozilla */ #field2::-moz-placeholder { color:#00f; } #field3::-moz-placeholder { color:#090; background:lightgreen; text-transform:uppercase; } #field4::-moz-placeholder { font-style:italic; text-decoration:overline; letter-spacing:3px; color:#999; }
Кредит: Дэвид Уолш
Теперь у нас есть стандартный способ применить CSS к заполнителю ввода :
::placeholder
псевдо-элемент из этого CSS модуля уровня 4 Черновика.
Используйте Новый
::placeholder
, Если вы используете autoprefixer.Обратите внимание, что .заполнитель mixin из Bootstrap устарел в пользу этого.
Пример:
input::placeholder { color: black; }
При использовании autoprefixer вышеописанное будет преобразовано в правильный код для всех браузеров.
Я просто понимаю, что для Mozilla Firefox 19+ браузер дает значение непрозрачности для заполнителя, поэтому цвет не будет тем, что вы действительно хотите.
input::-webkit-input-placeholder, textarea::-webkit-input-placeholder { color: #eee; opacity:1; } input:-moz-placeholder, textarea:-moz-placeholder { color: #eee; opacity:1; } input::-moz-placeholder, textarea::-moz-placeholder { color: #eee; opacity:1; } input:-ms-input-placeholder, textarea:-ms-input-placeholder { color: #eee; opacity:1; }
Я перепишу
opacity
на 1, так что будет хорошо идти.
Я не помню, где я нашел этот фрагмент кода в Интернете (он не был написан мной, не помню, где я его нашел, и кто его написал).
$('[placeholder]').focus(function() { var input = $(this); if (input.val() == input.attr('placeholder')) { input.val(''); input.removeClass('placeholder'); } }).blur(function() { var input = $(this); if (input.val() == '' || input.val() == input.attr('placeholder')) { input.addClass('placeholder'); input.val(input.attr('placeholder')); } }).blur(); $('[placeholder]').parents('form').submit(function() { $(this).find('[placeholder]').each(function() { var input = $(this); if (input.val() == input.attr('placeholder')) { input.val(''); } }) });
Просто загрузите этот код JavaScript, а затем отредактируйте свой заполнитель с помощью CSS, вызвав это правило:
form .placeholder { color: #222; font-size: 25px; /* etc. */ }
Я думаю, что этот код будет работать, потому что заполнитель нужен только для ввода текста типа. Так что одной этой строки CSS будет достаточно для ваших нужд:
input[type="text"]::-webkit-input-placeholder { color: red; }
Для пользователейBootstrap , Если вы используете
class="form-control"
, может возникнуть проблема специфичности CSS. Вы должны получить более высокий приоритет:.form-control::-webkit-input-placeholder { color: red; } //.. and other browsers
Или если вы используете меньше :
.form-control{ .placeholder(red); }
Как насчет этого
<input type="text" value="placeholder text" onfocus="this.style.color='#000'; this.value='';" style="color: #f00;"/>
Нет CSS или заполнителя, но вы получаете ту же функциональность.
Если вы используете Bootstrap и не смогли получить эту работу, то, вероятно, вы пропустили тот факт, что Bootstrap сам добавляет эти селекторы. Это Bootstrap v3. 3, о котором мы говорим.
Если вы пытаетесь изменить заполнитель внутри .form-control CSS класс, то вы должны переопределить его следующим образом:
.form-control::-webkit-input-placeholder { /* WebKit, Blink, Edge */ color: #777; } .form-control:-moz-placeholder { /* Mozilla Firefox 4 to 18 */ color: #777; opacity: 1; } .form-control::-moz-placeholder { /* Mozilla Firefox 19+ */ color: #777; opacity: 1; } .form-control:-ms-input-placeholder { /* Internet Explorer 10-11 */ color: #777; }
Этот короткий и чистый код:
::-webkit-input-placeholder {color: red;} :-moz-placeholder {color: red; /* For Firefox 18- */} ::-moz-placeholder {color: red; /* For Firefox 19+ */} :-ms-input-placeholder {color: red;}
Я попробовал все комбинации здесь, чтобы изменить цвет, на моей мобильной платформе, и в конечном итоге это было:
-webkit-text-fill-color: red;
Что и сделало свое дело.
Для пользователя SASS/SCSS, использующего Bourbon, он имеет встроенную функцию.
//main.scss @import 'bourbon'; input { width: 300px; @include placeholder { color: red; } }
Вывод CSS, вы также можете захватить эту часть и вставить в свой код.
//main.css input { width: 300px; } input::-webkit-input-placeholder { color: red; } input:-moz-placeholder { color: red; } input::-moz-placeholder { color: red; } input:-ms-input-placeholder { color: red; }
Вот еще один пример:
.form-control::-webkit-input-placeholder { color: red; width: 250px; } h1 { color: red; }
<div class="col-sm-4"> <input class="form-control" placeholder="Enter text here.." ng-model="Email" required/> </div>
Хорошо, заполнители ведут себя по-разному в разных браузерах, поэтому вам нужно использовать префикс браузера в вашем CSS, чтобы сделать их идентичными, например Firefox дает прозрачность заполнителю по умолчанию, поэтому нужно добавить непрозрачность 1 в ваш css, плюс цвет, это не большая проблема в большинстве случаев, но хорошо, чтобы они были согласованными: {[2]]}
*::-webkit-input-placeholder { /* WebKit browsers */ color: #ccc; } *:-moz-placeholder { /* Mozilla Firefox <18 */ color: #ccc; opacity: 1; } *::-moz-placeholder { /* Mozilla Firefox 19+ */ color: #ccc; opacity: 1; } *:-ms-input-placeholder { /* Internet Explorer 10-11 */ color: #ccc; }
Попробуйте этот код для другого входного элемента другой стиль
your css selector::-webkit-input-placeholder { /*for webkit */ color:#909090; opacity:1; } your css selector:-moz-placeholder { /*for mozilla */ color:#909090; opacity:1; } your css selector:-ms-input-placeholder { /*for for internet exprolar */ color:#909090; opacity:1; }
Пример 1:
input[type="text"]::-webkit-input-placeholder { /*for webkit */ color: red; opacity:1; } input[type="text"]:-moz-placeholder { /*for mozilla */ color: red; opacity:1; } input[type="text"]:-ms-input-placeholder { /*for for internet exprolar */ color: red; opacity:1; }
Пример 2:
input[type="email"]::-webkit-input-placeholder { /*for webkit */ color: gray; opacity:1; } input[type="email"]:-moz-placeholder { /*for mozilla */ color: gray; opacity:1; } input[type="email"]:-ms-input-placeholder { /*for for internet exprolar */ color: gray; }
Добавление реальной очень хорошей и простой возможности: css фильтры !
Он будет стилизовать все, включая заполнитель.
Далее оба входа будут установлены на одной палитре, используя фильтр оттенков для изменения цвета. Теперь он очень хорошо отображается в браузерах (кроме ie...)
input { filter: sepia(100%) saturate(400%) grayscale(0) contrast(200%) hue-rotate(68deg) invert(18%); }
<input placeholder="Hello world!" /> <input type="date" /><br> <input type="range" /> <input type="color" />
, чтобы пользователи могли динамически изменять его, используя тип ввода цвет для изменений, или чтобы найти нюансы, проверьте этот фрагмент:
Откуда: https://codepen.io/Nico_KraZhtest/pen/bWExEB
function stylElem() { stylo.dataset.hue = ((parseInt(stylo.value.substring(1), 16))/46666).toFixed(0) Array.from(document.querySelectorAll('input, audio, video')).forEach(function(e){ e.style.cssText += ";filter:sepia(100%) saturate(400%)grayscale(0)contrast(200%)hue-rotate("+ stylo.dataset.hue+"deg)invert("+(stylo.dataset.hue/3.6)+"%)" out.innerText = e.style.cssText })()} stylElem()
<div id="out"></div> <p> <input placeholder="Hello world!" /> <input type="date" /><br> <input type="range" /> <input type="color" /> Colors (change me)-> <input type="color" id="stylo" oninput="stylElem()" /> <br><br> <audio controls src="#"></audio> <br><br> <video controls src="#"></video>
Css filters docs: https://developer.mozilla.org/en-US/docs/Web/CSS/filter
Вы можете изменить цвет заполнителя ввода HTML5 с помощью CSS. Если случайно, ваш CSS конфликт, этот код Примечание работает, вы можете использовать (!важно) как показано ниже.
::-webkit-input-placeholder { /* WebKit, Blink, Edge */ color:#909 !important; } :-moz-placeholder { /* Mozilla Firefox 4 to 18 */ color:#909 !important; opacity:1 !important; } ::-moz-placeholder { /* Mozilla Firefox 19+ */ color:#909 !important; opacity:1 !important; } :-ms-input-placeholder { /* Internet Explorer 10-11 */ color:#909 !important; } ::-ms-input-placeholder { /* Microsoft Edge */ color:#909 !important; } <input placeholder="Stack Snippets are awesome!">
Надеюсь, это поможет.
Вы можете использовать это для ввода и стиля фокусировки:
input::-webkit-input-placeholder { color:#666;} input:-moz-placeholder { color:#666;} input::-moz-placeholder { color:#666;} input:-ms-input-placeholder { color:#666;} /* focus */ input:focus::-webkit-input-placeholder { color:#eee; } input:focus:-moz-placeholder { color:#eee } /* FF 4-18 */ input:focus::-moz-placeholder { color:#eee } /* FF 19+ */ input:focus:-ms-input-placeholder { color:#eee } /* IE 10+ */
Compass имеет миксин для этого из коробки.
Возьмем Ваш пример:
<input type="text" placeholder="Value">
И в SCSS с использованием компаса:
input[type='text'] { @include input-placeholder { color: #616161; } }
См. раздел docs для ввода-заполнителя mixin.
Попробуйте это поможет вам это будет работать во всех ваших браузерах fav:
::-webkit-input-placeholder { /* Chrome/Opera/Safari */ color: pink; } ::-moz-placeholder { /* Firefox 19+ */ color: pink; } :-moz-placeholder { /* Firefox 18- */ color: pink; }