开发者问题收集

用CSS更改HTML输入的占位符颜色

2010-04-09
2025198

Chrome v4 支持 input[type=text] 元素上的 placeholder 属性 (其他元素可能也支持)。

但是,以下 CSS 对占位符的值没有任何影响:

input[placeholder], [placeholder], *[placeholder] {
    color: red !important;
}
<input type="text" placeholder="Value">

仍将保持为 灰色 ,而不是 红色

有没有办法更改占位符文本的颜色?

3个回答

实现

有三种不同的实现:伪元素、伪类和无。

  • 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 年 4 月: 大多数现代浏览器都支持简单的伪元素 ::placeholder [ Ref ]

Internet Explorer 9 及更低版本根本不支持 placeholder 属性,而 Opera 12 及更低版本不支持 任何 CSS 选择器用于占位符。

关于最佳实现的讨论仍在继续。请注意,伪元素在 Shadow DOM 中的作用类似于真实元素。 input 上的 padding 将不会获得与伪元素相同的背景颜色。

CSS 选择器

用户代理必须忽略具有未知选择器的规则。请参阅 选择器级别 3

a group of selectors containing an invalid selector is invalid.

::-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)也应进行测试。
  • 占位符不能替代标签,因此请确保您也有一个标签
  • 有些浏览器对某些 input 类型( emailsearch )使用额外的默认 CSS。这些可能会以意想不到的方式影响渲染。使用 属性 -webkit-appearance-moz-appearance 进行更改。示例:
[type="search"] {
        -moz-appearance:    textfield;
        -webkit-appearance: textfield;
        appearance: textfield;
    }
fuxia
2010-04-09
/* 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>

这将为所有 inputtextarea 占位符设置样式。

重要提示: 请勿将这些规则分组。相反,为每个选择器制定单独的规则(组中一个无效选择器会导致整个组无效)。

2012-03-14

您可能还想设置文本区域的样式:

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

input:-moz-placeholder,
textarea:-moz-placeholder {
  color: #FF9900;
}
<textarea rows="4" cols="50" placeholder="Stack Snippets are nice!">
</textarea>
2011-05-11