68

I tried to follow the following topic, but unsuccessfully. Change an HTML5 input's placeholder color with CSS

I tried to colorize my placeholder, but it still stay grey on Chrome 17.0.963.56 m.

HTML

<input type='text' name='test' placeholder='colorize placeholder' value='' />

CSS

INPUT::-webkit-input-placeholder, 
INPUT:-moz-placeholder {
    color:red;
}
input[placeholder], [placeholder], *[placeholder]
{
    color:green !important;
}

JSfiddle

On Firefox 10.0.2, it works well.

4
  • 8
    If you're using a CSS framework like Bootstrap, they might already have these styles defined, so you have to add !important, or make sure everything cascades as intended.
    – Kevin Beal
    Commented Dec 30, 2015 at 21:11
  • !important did the trick for me. Without that, the placeholder text colour remained frustratingly unchangeable, even while other font attributes could be changed.
    – Velojet
    Commented Feb 2, 2016 at 22:45
  • Possible duplicate of Change an input's HTML5 placeholder color with CSS
    – fuxia
    Commented Apr 10, 2016 at 13:02
  • @fuxia, not a duplicate, since it I started with the question you quote (I quote it too in my question), then I had a problem with, that's why I asked this question.
    – el-teedee
    Commented Mar 3, 2018 at 13:04

4 Answers 4

103

You forget a :. Because of that, the whole selector got corrupted and didn't work. http://jsfiddle.net/a96f6/87/

Edit: Seems like (after an update?) this doesn't work anymore, try this:

input::-webkit-input-placeholder{
    color:red;
}
input:-moz-placeholder {
    color:red;
}

Note: don't mix the vendor prefix selectors (-moz, -webkit, -ms, ...). Chrome for example won't understand "-moz-" and then ignores the whole selector.

Edit for clarification: To make it work in all browsers, use this code:

::-webkit-input-placeholder {
    color:red;
}

::-moz-placeholder {
    color:red;
}

::-ms-placeholder {
    color:red;
}

::placeholder {
    color:red;
}

12
  • 1
    Thanks ! your were right. New rules are : input::-webkit-input-placeholder, input::-moz-placeholder { color:red; }
    – el-teedee
    Commented Feb 27, 2012 at 13:30
  • 3
    Isn’t that input:-moz-placeholder { color:red; } instead? That’s what’s in the other thread. Also, do not put both selectors in one rule. Commented Apr 24, 2012 at 7:59
  • 4
    placeholder color is not red in my chrome 29.0.1547.57 Commented Sep 3, 2013 at 7:26
  • css code still works for me, but the fiddle was outdated. jsfiddle.net/a96f6/87
    – Alex
    Commented Nov 10, 2013 at 11:18
  • 11
    "Don't mix the vendor prefix" - this tripped me up for HOURS! Commented Nov 4, 2015 at 12:09
50

As @Alex said, for some reason you can't combine the selectors for multiple browsers.

This will work

::-webkit-input-placeholder {
    color:red;
}

::-moz-placeholder {
    color:red;
}

::-ms-placeholder {
    color:red;
}

::placeholder {
    color:red;
}

But this won't work (in Chrome at least):

::-webkit-input-placeholder,
::-moz-placeholder,
::-ms-placeholder,
::placeholder {
    color:red;
}

Looks like a browser implementation quirk to me.

Also, note that you don't have to define placeholder styles globally, you can still scope the ::placeholder selector just like you normally do. This works:

.my-form .input-text::-webkit-input-placeholder {
    color:red;
}

.my-form .input-text::-moz-placeholder {
    color:red;
}
3
  • 20
    thanks for mentioning what won't work, thats where i was screwing up Commented Dec 28, 2016 at 20:05
  • Does anyone know why the first way doesn't work? I thought that was just really common css syntax. So confused
    – tamj0rd2
    Commented Aug 4, 2020 at 7:08
  • 2
    Additionally, this will NOT work either (in Chrome at least): .my-form .input-text::-webkit-input-placeholder, .my-second-form .input-text::-webkit-input-placeholder { color: red; }
    – leendertvb
    Commented Jun 29, 2022 at 13:18
6

I have just experienced the same problem and thought it would be good to share. For some reason, the color was not changing on firefox and I noticed that its only when I use hexadecimal values so I did it this way for a particular website:

::-webkit-input-placeholder {
    color: #666666;
}

::-moz-placeholder {
    color: black;
}

::-ms-placeholder {
    color: #666666;
}

::placeholder {
    color: #666666;
}
2
  • No other answer was working for me! This placeholder thing is weird... can't combine vendor-prefixed selectors, can't use named colors...
    – papiro
    Commented Oct 27, 2017 at 5:25
  • What I noticed was that firefox lightens the color you choose. If you choose red it looks a bit pink, not the bright red that red would usually be.
    – pathfinder
    Commented Apr 28, 2019 at 0:40
1
::-webkit-input-placeholder {
    color: #008000;
}

Not the answer you're looking for? Browse other questions tagged or ask your own question.