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

Posted

技术标签:

【中文标题】使用 CSS 更改 HTML5 输入的占位符颜色【英文标题】:Change a HTML5 input's placeholder color with CSS 【发布时间】:2011-02-06 07:39:03 【问题描述】:

Chrome 支持 input[type=text] 元素上的 placeholder attribute(其他人可能也这样做)。

但下面的 CSS 对占位符的值没有任何作用:

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

Value 仍将保留为grey 而不是red

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

【问题讨论】:

快速提示(不是解决方案,仅供参考):如果我没记错的话, input[placeholder] 只匹配具有占位符属性的 标记,它与占位符不匹配属性本身。 是的,我的脑海里闪过一个想法,这可能就像尝试为元素的“标题”属性设置样式一样。所以 +1 的想法相同! @MathiasBynens :placeholder-shown 伪类匹配显示此类占位符文本的输入元素。 所以它匹配<input> 标签,例如input 选择器,但刚刚显示占位符文本。它也与占位符属性本身不匹配。 @HEX 它不像input 选择器,因为它选择了所有input 元素。 :placeholder-shown 仅选择当前显示占位符的 input 元素,允许您仅设置这些元素的样式,并有效地设置占位符文本的样式。你想说什么? @HEX(当然,它还选择了显示占位符文本的textarea元素。) 【参考方案1】:

您可能还想设置 textareas 的样式:

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>

【讨论】:

【参考方案2】:

添加一个非常好的和简单的可能性:CSS filters!

它将为所有内容设置样式,包括占位符。

以下将在同一调色板上设置两个input 元素,使用色调过滤器进行颜色更改。它现在在浏览器中渲染得很好(除了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" />

要允许用户动态更改它,使用输入类型颜色进行更改,或查找细微差别,请查看此 sn-p:

发件人:Codepen

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()
body background: black; color: white
Choose a color!
<input type="color" id="stylo" oninput="stylElem()">
<br>
<div id="out"></div> <p>
  <input placeholder="Hello world!" />
  <input type="date" /><br>
  <input type="range" />
 <br>
<audio controls src="#"></audio> <br><br> 
<video controls src="#"></video>

Css 过滤器文档:https://developer.mozilla.org/en-US/docs/Web/CSS/filter

【讨论】:

【参考方案3】:
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;

html

<input type="text" placeholder="Value" />

107

除了 toscho 的回答之外,我还注意到 Chrome 9-10 和 Safari 5 之间的一些 webkit 不一致,支持的 CSS 属性值得注意。

特别是 Chrome 9 和 10 在设置占位符样式时不支持背景颜色、边框、文本装饰和文本转换。

完整的跨浏览器比较是here。

【讨论】:

【参考方案4】:

这对于大多数现代浏览器来说都很好

input::placeholder
  color: red; // css implementation

以防万一您使用的是 SCSS

input 
  &::placeholder 
    color: red; // scss
  

【讨论】:

【参考方案5】:

::placeholder
  color: red;
&lt;input type="text" placeholder="Value"&gt;

很简单

点赞

【讨论】:

【参考方案6】:

这段简洁明了的代码:

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

【讨论】:

【参考方案7】:

我刚刚意识到,对于 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,这样就好了。

【讨论】:

【参考方案8】:

将此 CSS 代码用于所有浏览器工作:

 ::placeholdercolor:#ccc;

  **html**

 <input class="form-control" placeholder="write Here..">

【讨论】:

【参考方案9】:
<input type="text" class="input-control" placeholder="My Input">   

在你的 head 部分添加以下 CSS。

<style type="text/css">
    .input-control::placeholder  /* Chrome, Firefox, Opera, Safari 10.1+ */
                    color: red !important;
                    opacity: 1; /* Firefox */
    
        
     .input-control:-ms-input-placeholder  /* Internet Explorer 10-11 */
                    color: red !important;
     
        
     .input-control::-ms-input-placeholder  /* Microsoft Edge */
                    color: red !important;
     
</style>

以下是参考链接。 https://www.w3schools.com/howto/howto_css_placeholder.asp

【讨论】:

【参考方案10】:

试试这个效果

input::placeholder 
  color:#900009;

【讨论】:

为什么会这样?考虑为您的答案添加一些解释,使其在其他解决方案中脱颖而出。 我错过了输入部分,非常感谢【参考方案11】:

此代码将使用 ::placeholder 选择器更改占位符的颜色。

::-webkit-input-placeholder  
    /* Edge */
    color: red;


:-ms-input-placeholder  
    /* Internet Explorer */
    color: red;


::placeholder 
    color: red;

【讨论】:

【参考方案12】:

这是 CSS 选择器

的解决方案
::-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  /* Microsoft Edge */
   color:    #909;

:-ms-input-placeholder  /* Internet Explorer 10-11 */
   color:    #909;

WebKit、Blink (Safari、Google Chrome、Opera 15+)Microsoft Edge 正在使用伪元素: ::-webkit-input-placeholder。 Mozilla Firefox 4 到 18 正在使用伪类: :-moz-placeholder(一个冒号)。 Mozilla Firefox 19+ 正在使用伪元素: ::-moz-placeholder,但旧的选择器仍然可以工作一段时间。 Internet Explorer 10 和 11 正在使用伪类: :-ms-input-placeholder。 Internet Explorer 9 及更低版本根本不支持占位符属性,而 Opera 12 及更低版本不支持任何 CSS 选择器作为占位符。

【讨论】:

【参考方案13】:

HTML 的一部分:

 <form action="www.anything.com">
 <input type="text" name="name"
  placeholder="Enter sentence"/>
  </form>

我将展示如何通过 CSS 更改“输入句子”的表达颜色:

  ::placeholder
  color:blue;
   

【讨论】:

【参考方案14】:

这个怎么样

<input type="text" value="placeholder text" onfocus="this.style.color='#000'; 
    this.value='';" style="color: #f00;" />

没有 CSS 或占位符,但您可以获得相同的功能。

【讨论】:

如果有人在写完东西后再次点击会发生什么......他们写的原始文本将消失! @LuckySoni 你可以这样做,但我个人更喜欢第一个。 &lt;input type="text" value="placeholder text" onfocus="if(!this.haswriting)this.style.color='#000'; this.value='';" onblur="if(!this.value)this.style.color='#f00'; this.value='placeholder text'; this.haswriting=false;elsethis.haswriting=true;" style="color: #f00;"/&gt; 即使您的第二个版本也不提供相同的功能。如果用户使用此输入提交&lt;form&gt;,则占位符文本将被发送到服务器。我看到很多网站都做错了。 这很危险!如果您再次回到表单中,您将失去一切!【参考方案15】:

不同浏览器中特定元素的占位符颜色。

HTML

<input class='contact' type="email" placeholder="majed@firefly.com">

CSS 

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

【讨论】:

【参考方案16】:

最简单的方法是:

#yourInput::placeholder 
    color: red;/*As an example*/

/* if that would not work, you can always try styling the attribute itself: */
#myInput[placeholder] 
    color: red;

【讨论】:

【参考方案17】:

/* 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 占位符设置样式。

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

【讨论】:

【参考方案18】:

您可以将其用于输入和焦点样式:

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

【讨论】:

【参考方案19】:

实施

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

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 and lower do not support 任何用于占位符的 CSS 选择器。

关于最佳实施的讨论仍在继续。请注意,伪元素就像Shadow DOM 中的真实元素一样。 input 上的 padding 不会获得与伪元素相同的背景颜色。

CSS 选择器

要求用户代理忽略具有未知选择器的规则。见Selectors Level 3:

包含无效选择器的group 选择器无效。

所以我们需要为每个浏览器设置单独的规则。否则,所有浏览器都会忽略整个组。

::-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;
&lt;input placeholder="Stack Snippets are awesome!"&gt;

使用说明

小心避免产生不良对比。 Firefox 的占位符似乎默认为降低了不透明度,因此需要在此处使用 opacity: 1。 请注意,如果占位符文本不合适,则会将其截断 - 将输入元素的大小设置为 em,并使用较大的最小字体大小设置对其进行测试。不要忘记翻译:某些语言need more room 用于同一个词。 HTML 支持 placeholder 但不支持 CSS 的浏览器(如 Opera)也应进行测试。 某些浏览器对某些input 类型(emailsearch)使用额外的默认 CSS。这些可能会以意想不到的方式影响渲染。使用 properties -webkit-appearance-moz-appearance 来改变它。示例:
    [type="search"] 
        -moz-appearance:    textfield;
        -webkit-appearance: textfield;
        appearance: textfield;
    

【讨论】:

【参考方案20】:

您可以使用 CSS 更改 HTML5 输入的占位符颜色。如果偶然,您的 CSS 冲突,此代码注释正常工作,您可以使用 (!important),如下所示。

::-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!">

希望这会有所帮助。

【讨论】:

【参考方案21】:

在html文件中:

<input type="text" placeholder="placeholder" class="redPlaceHolder">

在css文件中:

.redPlaceHolder
   color: #ff0000;

【讨论】:

【参考方案22】:

试试这个

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

【讨论】:

【参考方案23】:
<style>
    ::-webkit-input-placeholder  
        color:red; 
     
    ::-moz-placeholder  
        color:red; 
     /* firefox 22+ */
    :-ms-input-placeholder  
        color:red; 
     /* ie10,11 */
    input:-moz-placeholder  
        color:red; 
    
 </style>

【讨论】:

【参考方案24】:

为不同的输入元素不同的样式尝试此代码

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;
   

【讨论】:

【参考方案25】:

试试这个会帮助你这将在你所有喜欢的浏览器中工作:

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

    :-moz-placeholder  
    /* Firefox 18- */
      color: pink;
    

【讨论】:

【参考方案26】:

好的,占位符在不同浏览器中的行为不同,因此您需要在 CSS 中使用浏览器前缀以使其相同,例如 Firefox 默认为占位符提供透明度,因此需要在您的 css 中添加 opacity 1 以及颜色,大多数时候这不是一个大问题,但让它们保持一致是件好事:

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

【讨论】:

【参考方案27】:

如果您使用autoprefixer,请使用新的::placeholder

请注意,Bootstrap 中的 .placeholder mixin 已弃用,取而代之的是。

例子:

input::placeholder  color: black; 

当使用 autoprefixer 时,上面的代码将被转换为所有浏览器的正确代码。

【讨论】:

【参考方案28】:

对于使用Bourbon的SASS/SCSS用户,它有一个内置函数。

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

【讨论】:

【参考方案29】:

如果您使用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;

【讨论】:

【参考方案30】:

我已经尝试了这里的所有组合来改变颜色,在我的移动平台上,最终是:

-webkit-text-fill-color: red;

成功了。

【讨论】:

This property allows you to specify a fill color for text. If it is not set, then the color property will be used to do the fill. 在我看来,您有一些其他 CSS 规则正在设置 color 属性。

以上是关于使用 CSS 更改 HTML5 输入的占位符颜色的主要内容,如果未能解决你的问题,请参考以下文章

Tailwind CSS 更改占位符选项的文本颜色

css 更改输入的占位符颜色

如何更改焦点上的占位符颜色?

如何在角材料中使用 css 更改 md-input-container 占位符颜色?

更改信用卡占位符颜色

text 使用此输入占位符SCSS Mixin更改占位符属性的颜色。添加背景颜色或只更改文本颜色