Change an HTML5 input's placeholder color with CSS

匿名 (未验证) 提交于 2019-12-03 01:26:01

问题:

Chrome supports the placeholder attribute on input[type=text] elements (others probably do too).

But the following CSS doesn't do anything to the placeholder's value:

input[placeholder], [placeholder], *[placeholder] {     color: red !important; }

Value will still remain grey instead of red.

Is there a way to change the color of the placeholder text?

回答1:

Implementation

There are three different implementations: pseudo-elements, pseudo-classes, and nothing.

  • WebKit, Blink (Safari, Google Chrome, Opera 15+) and Microsoft Edge are using a pseudo-element: ::-webkit-input-placeholder. [Ref]
  • Mozilla Firefox 4 to 18 is using a pseudo-class: :-moz-placeholder (one colon). [Ref]
  • Mozilla Firefox 19+ is using a pseudo-element: ::-moz-placeholder, but the old selector will still work for a while. [Ref]
  • Internet Explorer 10 and 11 are using a pseudo-class: :-ms-input-placeholder. [Ref]
  • April 2017: Most modern browsers support the simple pseudo-element ::placeholder [Ref]

Internet Explorer 9 and lower does not support the placeholder attribute at all, while Opera 12 and lower do not support any CSS selector for placeholders.

The discussion about the best implementation is still going on. Note the pseudo-elements act like real elements in the Shadow DOM. A padding on an input will not get the same background color as the pseudo-element.

CSS selectors

User agents are required to ignore a rule with an unknown selector. See Selectors Level 3:

a group of selectors containing an invalid selector is invalid.

So we need separate rules for each browser. Otherwise the whole group would be ignored by all browsers.

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

Usage notes

  • Be careful to avoid bad contrasts. Firefox's placeholder appears to be defaulting with a reduced opacity, so needs to use opacity: 1 here.
  • em and test them with big minimum font size settings. Don’t forget translations: some languages need more room for the same word.
  • Browsers with HTML support for placeholder but without CSS support for that (like Opera) should be tested too.
  • Some browsers use additional default CSS for some input types (email, search). These might affect the rendering in unexpected ways. Use the properties -webkit-appearance and -moz-appearance to change that. Example:
    [type="search"] {         -moz-appearance:    textfield;         -webkit-appearance: textfield;         appearance: textfield;     } 


回答2:

/* do not group these rules */ *::-webkit-input-placeholder {     color: red; } *:-moz-placeholder {     /* FF 4-18 */     color: red; } *::-moz-placeholder {     /* FF 19+ */     color: red; } *:-ms-input-placeholder {     /* IE 10+ */     color: red; }

This will style all input and textarea placeholders.

Important Note: Do not group these rules. Instead, make a separate rule for every selector (one invalid selector in a group makes the whole group invalid).



回答3:

You may also want to style textareas:

input::-webkit-input-placeholder, textarea::-webkit-input-placeholder {   color: #636363; } input:-moz-placeholder, textarea:-moz-placeholder {   color: #636363; } 


回答4:

For Bootstrap and Less users, there is a mixin .placeholder:

// Placeholder text // ------------------------- .placeholder(@color: @placeholderText) {   &:-moz-placeholder {     color: @color;   }   &:-ms-input-placeholder {     color: @color;   }   &::-webkit-input-placeholder {     color: @color;   } } 


回答5:

In addition to toscho's answer I've noticed some webkit inconsistencies between Chrome 9-10 and Safari 5 with the CSS properties supported that are worth noting.

Specifically Chrome 9 and 10 do not support background-color, border, text-decoration and text-transform when styling the placeholder.

The full cross-browser comparison is here.



回答6:

For Sass users:

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


回答7:

This will work fine. DEMO HERE:

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


回答8:

In Firefox and Internet Explorer, the normal input text color overrides the color property of placeholders. So, we need to

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


回答9:

Cross-browser solution:

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

Credit: David Walsh



回答10:

Now we have a standard way to apply CSS to an input's placeholder : ::placeholder pseudo-element from this CSS Module Level 4 Draft.



回答11:

Use the new ::placeholder if you use autoprefixer.

Note that the .placeholder mixin from Bootstrap is deprecated in favor of this.

Example:

input::placeholder { color: black; } 

When using autoprefixer the above will be converted to the correct code for all browsers.



回答12:

I just realize something for Mozilla Firefox 19+ that the browser gives an opacity value for the placeholder, so the color will not be what you really want.

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

I overwrite the opacity for 1, so it will be good to go.



回答13:

I don't remember where I've found this code snippet on the Internet (it wasn't written by me, don't remember where I've found it, nor who wrote it).

$('[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('');             }         })     }); 

Just load this JavaScript code and then edit your placeholder with CSS by calling this rule:

form .placeholder {    color: #222;    font-size: 25px;    /* etc. */ } 


回答14:

I think this code will work because a placeholder is needed only for input type text. So this one line CSS will be enough for your need:

input[type="text"]::-webkit-input-placeholder {     color: red; } 


回答15:

For Bootstrap users, if you are using class="form-control", there may be a CSS specificity issue. You should get a higher priority:

.form-control::-webkit-input-placeholder {     color: red; } //.. and other browsers 

Or if you are using Less:

.form-control{     .placeholder(red); } 


回答16:

How about this

No CSS or placeholder, but you get the same functionality.



回答17:

If you are using Bootstrap and couldn't get this working then probably you missed the fact that Bootstrap itself adds these selectors. This is Bootstrap v3.3 we are talking about.

If you are trying to change the placeholder inside a .form-control CSS class then you should override it like this:

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


回答18:

This short and clean code:

::-webkit-input-placeholder {color: red;} :-moz-placeholder           {color: red; /* For Firefox 18- */} ::-moz-placeholder          {color: red; /* For Firefox 19+ */} :-ms-input-placeholder      {color: red;} 


回答19:

I have tried every combination here to change the color, on my mobile platform, and eventually it was:

-webkit-text-fill-color: red; 

which did the trick.



回答20:

For SASS/SCSS user using Bourbon, it has a built-in function.

//main.scss @import 'bourbon';  input {   width: 300px;    @include placeholder {     color: red;   } } 

CSS Output, you can also grab this portion and paste into your code.

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


回答21:

Here is one more example:

.form-control::-webkit-input-placeholder {   color: red;   width: 250px; } h1 {   color: red; }


回答22:

OK, placeholders behave differently in different browsers, so you need using browser prefix in your CSS to make them identical, for example Firefox gives a transparency to placeholder by default, so need to add opacity 1 to your css, plus the color, it's not a big concern most of the times, but good to have them consistent:

*::-webkit-input-placeholder { /* WebKit browsers */     color:    #ccc; } *:-moz-placeholder { /* Mozilla Firefox 


回答23:

try this code for different input element different style

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

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

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


回答24:

you can use this for input and focus style:

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+ */ 

iraweb



回答25:

Compass has a mixin for this out of the box.

Take your example:

And in SCSS using compass:

input[type='text'] {   @include input-placeholder {     color: #616161;   } } 

See docs for the input-placeholder mixin.



回答26:

You can change an HTML5 input's placeholder color with CSS. If by chance, your CSS conflict, this code note working , you can use (!important) like below.

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

Hope this will help.



回答27:

try this will help you this will work in all your fav browsers :

::-webkit-input-placeholder {      /* Chrome/Opera/Safari */       color: pink;     }     ::-moz-placeholder {      /* Firefox 19+ */       color: pink;     }      :-moz-placeholder {      /* Firefox 18- */       color: pink;     } 


回答28:



回答29:

Try this

::-webkit-input-placeholder { /* Chrome/Opera/Safari */   color: pink; } ::-moz-placeholder { /* Firefox 19+ */   color: pink; } :-ms-input-placeholder { /* IE 10+ */   color: pink; } :-moz-placeholder { /* Firefox 18- */   color: pink; } 


回答30:

In the html file:

In the css file:

.redPlaceHolder{    color: #ff0000; } 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!