首页 文章

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

提问于
浏览
3692

Chrome支持placeholder attribute input[type=text] 元素(其他人可能也支持) .

但是以下 CSS 没有't do anything to the placeholder'的值:

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

Value 仍将保留 grey 而不是 red .

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

30 回答

  • 14

    现在我们有一种标准方法将CSS应用于输入的占位符: ::placeholder 伪元素来自this CSS模块级别4草稿 .

  • 46

    您可能还想要样式textareas:

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

    实施

    有三种不同的实现:伪元素,伪类和什么都没有 .

    • WebKit,Blink(Safari,谷歌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 . [参考文献]

    • 2017年4月: Most modern browsers support the simple pseudo-element ::placeholder [Ref]

    Internet Explorer 9及更低版本根本不支持 placeholder 属性,而Opera 12 and lower do not support任何用于占位符的CSS选择器 .

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

    CSS选择器

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

    包含无效选择器的一组选择器无效 .

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

    ::-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 中调整输入元素的大小,并使用较大的最小字体大小设置对其进行测试 . 不要忘记翻译:对于同一个单词,请使用某些语言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;
        }
    
  • 34

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

    特别是Chrome 9和10在设置占位符样式时不支持 background-colorbordertext-decorationtext-transform .

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

  • 39

    我在这里尝试了各种组合来改变颜色,在我的移动平台上,最终它是:

    -webkit-text-fill-color: red;
    

    这诀窍 .

  • 29

    试试这将有助于您在所有您喜欢的浏览器中工作:

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

    在Firefox和Internet Explorer中,普通输入文本颜色会覆盖占位符的颜色属性 . 所以,我们需要

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

    跨浏览器解决方案:

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

    来源:David Walsh

  • 16

    我认为这段代码会起作用,因为只有输入类型的文本才需要占位符 . 所以这一行CSS足以满足您的需求:

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

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

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

    对于BootstrapLess用户,有一个mixin .placeholder:

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

    对于使用Bourbon的SASS / SCSS用户,它具有内置功能 .

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

    CSS输出,您也可以 grab 这部分并粘贴到您的代码中 .

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

    这个怎么样

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

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

  • 4

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

    请注意,不推荐使用Bootstrap中的.placeholder mixin来支持此功能 .

    例:

    input::placeholder { color: black; }
    

    使用自动修复器时,上述内容将转换为所有浏览器的正确代码 .

  • 0

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

    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;
        }
    
  • 4
    /* 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"/> 
    <textarea placeholder="hello"></textarea>

    这将设置所有 inputtextarea 占位符的样式 .

    Important Note: 不要对这些规则进行分组 . 相反,为每个选择器创建一个单独的规则(组中的一个无效选择器使整个组无效) .

  • 2

    Compass有一个开箱即用的mixin .

    举个例子:

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

    在SCSS中使用指南针:

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

    See docs for the input-placeholder mixin.

  • 2

    我只是意识到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,所以最好去 .

  • 4610

    好的,占位符在不同的浏览器中表现不同,所以你需要在CSS中使用浏览器前缀使它们相同,例如Firefox默认为占位符提供透明度,所以需要为你的css添加不透明度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;
    }
    
  • 3

    您可以使用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!">
    

    希望这会有所帮助 .

  • 1

    对于Bootstrap用户,如果您正在使用 class="form-control" ,可能存在CSS特异性问题 . 你应该获得更高的优先级:

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

    或者如果您使用Less

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

    如果您正在使用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;
    }
    
  • 263

    添加一个非常好的和简单的实际可能性: css filters

    它会设置所有内容,包括占位符 .

    以下内容将在同一调色板上设置两个输入,使用色调过滤器进行颜色更改 . 它现在在浏览器中渲染得很好(除了......)

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

    要允许用户动态更改,使用输入类型颜色进行更改或查找细微差别,请查看以下代码段:

    来自:https://codepen.io/Nico_KraZhtest/pen/bWExEB

    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()
    
    <div id="out"></div> <p>
      <input placeholder="Hello world!" />
      <input type="date" /><br>
      <input type="range" />
      <input type="color" />
    Colors (change me)-> 
    <input type="color" id="stylo" oninput="stylElem()" /> <br><br>
    <audio controls src="#"></audio> <br><br> 
    <video controls src="#"></video>
    

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

  • 677

    对于Sass用户:

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

    这个简短而干净的代码:

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

    尝试这个代码为不同的输入元素不同的风格

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

    我不记得我在互联网上找到这段代码片段的地方(它不是我写的,不记得我找到它的地方,也不记得是谁写的) .

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

    只需加载此JavaScript代码,然后通过调用此规则使用CSS编辑占位符:

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

    最简单的方法是:

    #yourInput::placeholder {
        color: red;/*As an example*/
    }
    /* if that would not work, you can always try styling the attribute itself: */
    #myInput[placeholder] {
        color: red;
    }
    
  • 32

    这样可以正常工作 . 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;
    }
    
    <input type="text" placeholder="Value" />
    
  • 31

    这是另一个例子:

    .form-control::-webkit-input-placeholder {
      color: red;
      width: 250px;
    }
    h1 {
      color: red;
    }
    
    <div class="col-sm-4">
      <input class="form-control" placeholder="Enter text here.." ng-model="Email" required/>
    </div>
    

相关问题