使用 CSS 更改 HTML 输入的占位符颜色
Chrome v4 支持 placeholder 属性(其他元素也可能这样做)。
但是,以下 CSS 不会对占位符的值执行任何操作:
input[placeholder], [placeholder], *[placeholder] {
color: red !important;
}
<input type="text" placeholder="Value">
Value
仍将保持灰色
,而不是红色
。
有没有办法改变占位符文本的颜色?
Chrome v4 supports the placeholder attribute on input[type=text]
elements (others probably do too).
However, the following CSS doesn't do anything to the placeholder's value:
input[placeholder], [placeholder], *[placeholder] {
color: red !important;
}
<input type="text" placeholder="Value">
Value
will still remain grey
instead of red
.
Is there a way to change the color of the placeholder text?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(30)
从 2017 年 4 月起:大多数现代浏览器现在支持简单的伪元素
::placeholder
[Ref]实现
共有三种不同的实现:伪元素、伪类和无。
::-webkit-input-placeholder
。 [参考]:-moz-placeholder
(一个冒号)。 [参考]::-moz-placeholder
,但旧的选择器仍然可以工作一段时间。 [参考 ]:-ms-input-placeholder
。 [参考 ]Internet Explorer 9 及更低版本根本不支持
placeholder
属性,而 Opera 12 及更低版本不支持任何 CSS 选择器占位符。关于最佳实施方案的讨论仍在继续。请注意,伪元素的行为就像 中的真实元素一样影子 DOM。
input
上的padding
将不会获得与伪元素相同的背景颜色。CSS 选择器
用户代理需要忽略具有未知选择器的规则。请参阅选择器级别 3:
所以我们需要为每个浏览器制定单独的规则。否则整个组将被所有浏览器忽略。
使用说明
opacity: 1
。em
调整输入元素的大小,并使用较大的最小字体大小设置对其进行测试。不要忘记翻译:某些语言需要更多空间同一个词。placeholder
但不支持 CSS 的浏览器(例如 Opera)也应该进行测试。输入
类型(电子邮件
、搜索)。这些可能会以意想不到的方式影响渲染。使用属性
-webkit-appearance< /code> 和
-moz-appearance
来改变这一点。例子:From April 2017: most modern browsers now support the simple pseudo-element
::placeholder
[Ref]Implementation
There are three different implementations: pseudo-elements, pseudo-classes, and nothing.
::-webkit-input-placeholder
. [Ref]:-moz-placeholder
(one colon). [Ref]::-moz-placeholder
, but the old selector will still work for a while. [Ref]:-ms-input-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 aninput
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:
So we need separate rules for each browser. Otherwise the whole group would be ignored by all browsers.
Usage notes
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.placeholder
but without CSS support for that (like Opera) should be tested too.input
types (email
,search
). These might affect the rendering in unexpected ways. Use the properties-webkit-appearance
and-moz-appearance
to change that. Example:这将为所有
input
和textarea
占位符设置样式。重要说明:不要对这些规则进行分组。相反,为每个选择器制定单独的规则(一组中的一个无效选择器会使整个组无效)。
This will style all
input
andtextarea
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).
您可能还想设置文本区域的样式:
You may also want to style textareas:
对于 Bootstrap 和 较少用户,有一个mixin .placeholder:
For Bootstrap and Less users, there is a mixin .placeholder:
除了 toscho 的回答之外,我还注意到 Chrome 9-10 和 Safari 5 之间的一些 webkit 不一致以及所支持的 CSS 属性值得注意。
具体来说,Chrome 9 和 10 在以下情况下不支持
background-color
、border
、text-decoration
和text-transform
设置占位符的样式。完整的跨浏览器比较位于此处。
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
andtext-transform
when styling the placeholder.The full cross-browser comparison is here.
对于 Sass 用户:
For Sass users:
这会工作得很好。 此处演示:
This will work fine. DEMO HERE:
CSS 提供了
::placeholder
伪元素。请注意, Bootstrap 中的 .placeholder mixin 已被弃用,取而代之的是。
示例:
当使用 autoprefixer 时,上述内容将转换为所有浏览器的正确代码。
CSS provides the
::placeholder
pseudo-element.Note that the .placeholder mixin from Bootstrap is deprecated in favor of this.
Example:
When using autoprefixer the above will be converted to the correct code for all browsers.
在 Firefox 和 Internet Explorer 中,正常输入文本颜色会覆盖占位符的颜色属性。所以,我们需要
In Firefox and Internet Explorer, the normal input text color overrides the color property of placeholders. So, we need to
跨浏览器解决方案:
信用:David Walsh
Cross-browser solution:
Credit: David Walsh
现在我们有一个标准方法将 CSS 应用于输入的占位符:来自 此 CSS 模块级别 4 草案。
Now we have a standard way to apply CSS to an input's placeholder :
::placeholder
pseudo-element from this CSS Module Level 4 Draft.我刚刚意识到 Mozilla Firefox 19+ 浏览器为占位符提供了不透明度值,因此颜色不会是您真正想要的颜色。
我将
opacity
覆盖为 1,所以一切顺利。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.
I overwrite the
opacity
for 1, so it will be good to go.对于 Bootstrap 用户,如果您使用的是
class=" form-control”
,可能存在 CSS 特异性问题。您应该获得更高的优先级:或者如果您使用 Less:
For Bootstrap users, if you are using
class="form-control"
, there may be a CSS specificity issue. You should get a higher priority:Or if you are using Less:
我认为这段代码会起作用,因为仅输入类型文本需要占位符。所以这一行 CSS 就足够满足你的需要了:
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:
我不记得在互联网上哪里找到了这个代码片段(它不是我写的,不记得我在哪里找到它,也不记得是谁写的)。
只需加载此 JavaScript 代码,然后通过调用以下规则使用 CSS 编辑占位符:
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).
Just load this JavaScript code and then edit your placeholder with CSS by calling this rule:
这个怎么样
没有 CSS 或占位符,但您可以获得相同的功能。
How about this
No CSS or placeholder, but you get the same functionality.
这个简短而干净的代码:
This short and clean code:
如果您使用 Bootstrap 并且无法正常工作,那么可能您错过了 Bootstrap 本身添加这些选择器的事实。这就是我们所说的Bootstrap v3.3。
如果您尝试更改 .form-control CSS 类中的占位符,那么您应该像这样覆盖它:
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:
我在我的移动平台上尝试了这里的每种组合来改变颜色,最终是:
哪个成功了。
I have tried every combination here to change the color, on my mobile platform, and eventually it was:
which did the trick.
添加一个实际非常好的和简单的可能性:CSS 过滤器!
它将设置所有内容的样式,包括占位符。
下面将在同一调色板上设置两个
input
元素,使用色调过滤器进行颜色更改。它现在在浏览器中渲染得很好(除了ie......)要允许用户动态更改它,使用输入类型颜色进行更改,或查找细微差别,请查看以下代码片段:
来自: Codepen
CSS 过滤器文档: https://developer.mozilla.org/en- US/docs/Web/CSS/filter
Adding an actual very nice and simple possibility: CSS filters!
It will style everything, including the placeholder.
The following will set both
input
elements on the same palette, using the hue filter for color changes. It render very well now in browsers (except ie...)To allow users to change it dynamically, using an input type color for changes, or to find nuances, check out this snippet:
From: Codepen
Css filters docs: https://developer.mozilla.org/en-US/docs/Web/CSS/filter
对于使用 Bourbon 的 SASS/SCSS 用户,它有一个内置函数。
CSS 输出,您也可以抓取这部分并粘贴到您的代码中。
For SASS/SCSS user using Bourbon, it has a built-in function.
CSS Output, you can also grab this portion and paste into your code.
对于不同的输入元素不同的样式尝试此代码
示例 1:
示例 2:
try this code for different input element different style
example 1:
example 2:
这里还有一个例子:
Here is one more example:
您可以使用 CSS 更改 HTML5 输入的占位符颜色。如果碰巧你的 CSS 发生冲突,这段代码可以正常工作,你可以使用 (!important) ,如下所示。
希望这会有所帮助。
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.
Hope this will help.
这对于大多数现代浏览器来说都很好,
以防万一您使用的是 SCSS
This is fine for most of the modern browsers
Just in case if you are using SCSS
好的,占位符在不同的浏览器中表现不同,因此您需要在CSS中使用浏览器前缀使它们相同,例如Firefox默认为占位符提供透明度,因此需要在CSS中添加不透明度1,再加上颜色,这不是大多数时候这是一个大问题,但保持它们一致是件好事:
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:
您可以将其用于输入和焦点样式:
You can use this for input and focus style:
最简单的方法是:
The easiest way would be:
解决方案
::-webkit-输入-占位符。
:-moz-占位符(一个冒号)。
Mozilla Firefox 19+ 使用伪元素:
::-moz-placeholder,但旧的选择器仍然可以工作一段时间。
:-ms-输入占位符。
Here is the solution with CSS selectors
::-webkit-input-placeholder.
:-moz-placeholder (one colon).
Mozilla Firefox 19+ is using a pseudo-element:
::-moz-placeholder, but the old selector will still work for a while.
:-ms-input-placeholder.