Domanda

Chrome supporta il attributo segnaposto Su input[type=text] elementi (probabilmente anche altri lo fanno).

Ma il seguente CSS Non fa nulla al valore del segnaposto:

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

Value rimarrà ancora grey invece di red.

C'è un modo per cambiare il colore del testo segnaposto?

È stato utile?

Soluzione

Implementazione

Esistono tre diverse implementazioni: pseudo-elementi, pseudo-class e niente.

  • Webkit, Blink (Safari, Google Chrome, Opera 15+) e Microsoft Edge utilizzano uno pseudo-elemento: ::-webkit-input-placeholder. [Rif]
  • Mozilla Firefox da 4 a 18 sta usando una Pseudo-Classe: :-moz-placeholder (uno colon). [Rif]
  • Mozilla Firefox 19+ sta usando uno pseudo-elemento: ::-moz-placeholder, ma il vecchio selettore funzionerà ancora per un po '. [Rif]
  • Internet Explorer 10 e 11 utilizzano una Pseudo-Classe: :-ms-input-placeholder. [Rif]
  • Aprile 2017: La maggior parte dei browser moderni supporta il semplice pseudo-elemento ::placeholder [Rif]

Internet Explorer 9 e Lower non supporta il placeholder attributo, mentre Opera 12 e inferiore non supportano Qualsiasi selettore CSS per segnaposto.

La discussione sulla migliore implementazione è ancora in corso. Nota gli pseudo-elementi si comportano come elementi reali nel Dom Shadow. UN padding su un input Non otterrà lo stesso colore di sfondo dell'elemento pseudo-.

Selettori CSS

Gli agenti utente sono tenuti a ignorare una regola con un selettore sconosciuto. Vedere Selezionisti Livello 3:

un gruppo di selettori contenenti un selettore non valido non è valido.

Quindi abbiamo bisogno di regole separate per ogni browser. Altrimenti l'intero gruppo verrebbe ignorato da tutti i browser.

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

Note di utilizzo

  • Fai attenzione a evitare cattivi contrasti. Il segnaposto di Firefox sembra essere inadempiente con una ridotta opacità, quindi deve essere utilizzato opacity: 1 qui.
  • Si noti che il testo del segnaposto è appena interrotto se non si adatta: dimensi i tuoi elementi di input in em e testarli con grandi impostazioni di dimensioni del carattere minimo. Non dimenticare le traduzioni: alcune lingue Hai bisogno di più spazio per la stessa parola.
  • Browser con supporto HTML per placeholder Ma senza il supporto CSS per quello (come l'opera) dovrebbe essere testato anche.
  • Alcuni browser utilizzano CSS predefiniti aggiuntivi per alcuni input tipi (email, search). Questi potrebbero influire sul rendering in modi inaspettati. Utilizzare il proprietà -webkit-appearance e -moz-appearance per cambiarlo. Esempio:
    [type="search"] {
        -moz-appearance:    textfield;
        -webkit-appearance: textfield;
        appearance: textfield;
    }

Altri suggerimenti

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

Questo stile sarà tutto input e textarea segnaposto.

Nota importante: Non raggruppare queste regole. Invece, fai una regola separata per ogni selettore (un selettore non valido in un gruppo rende l'intero gruppo non valido).

Potresti anche voler modellare textArea:

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

Per Bootstrap e Meno utenti, c'è un mixin .holder:

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

Oltre alla risposta di Toscho, ho notato alcune incoerenze Webkit tra Chrome 9-10 e Safari 5 con le proprietà CSS supportate che vale la pena notare.

In particolare Chrome 9 e 10 non supportano background-color, border, text-decoration e text-transform Quando si stima il segnaposto.

Il confronto completo del browser è qui.

Per Sass utenti:

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

Funzionerà bene. Demo qui:

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

In Firefox e Internet Explorer, il normale testo di input sovrascrive la proprietà del colore dei segnaposto. Quindi, dobbiamo farlo

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

Soluzione cross-browser:

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

Credito: David Walsh

Usa il nuovo ::placeholder Se usi autoprefixer.

Si noti che il mixin .holder. Bootstrap è deprecato a favore di questo.

Esempio:

input::placeholder { color: black; }

Quando si utilizza AutoPreFixer, sopra verrà convertito nel codice corretto per tutti i browser.

Ora abbiamo un modo standard per applicare CSS al segnaposto di un input: ::placeholder Pseudo-elemento da questo Draft di livello 4 del modulo CSS.

Mi rendo conto solo qualcosa per Mozilla Firefox 19+ che il browser dà un valore di opacità per il segnaposto, quindi il colore non sarà quello che vuoi veramente.

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

Sovrano il opacity Per 1, quindi sarà bene andare.

Non ricordo dove ho trovato questo frammento di codice su Internet (non è stato scritto da me, non ricordo dove l'ho trovato, né chi l'ha scritto).

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

Basta caricare questo codice JavaScript e quindi modificare il tuo segnaposto con CSS chiamando questa regola:

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

Penso che questo codice funzionerà perché un segnaposto è necessario solo per il testo del tipo di input. Quindi questa linea CSS sarà sufficiente per la tua necessità:

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

Per Bootstrap utenti, se si utilizzano class="form-control", potrebbe esserci un problema di specificità CSS. Dovresti ottenere una priorità più alta:

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

O se stai usando Meno:

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

Se stai usando Bootstrap E non sono riuscito a farlo funzionare, probabilmente ti sei perso il fatto che Bootstrap stesso aggiunge questi selettori. Questo è Bootstrap v3.3 di cui stiamo parlando.

Se stai cercando di cambiare il segnaposto all'interno di un .Form-Control Classe CSS quindi dovresti sovrascriverla in questo modo:

.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;
}

Questo codice corto e pulito:

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

Cosa ne pensi di questo

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

Nessun CSS o segnaposto, ma ottieni la stessa funzionalità.

Ho provato ogni combinazione qui per cambiare il colore, sulla mia piattaforma mobile, e alla fine lo è stato:

-webkit-text-fill-color: red;

che ha fatto il trucco.

Per l'utente SASS/SCSS utilizzando Bourbon, ha una funzione integrata.

//main.scss
@import 'bourbon';

input {
  width: 300px;

  @include placeholder {
    color: red;
  }
}

Output CSS, puoi anche prendere questa porzione e incollare nel tuo codice.

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

Prova questo codice per diversi elementi di input in stile diverso

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

Esempio 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;
}

Esempio 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;
   }

Ecco un altro esempio:

.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>

Aggiunta di una vera possibilità molto bella e semplice: Filtri CSS!

enter image description here

enter image description here

enter image description here

Siederà tutto, incluso il segnaposto.

Quanto segue impostare entrambi gli input sulla stessa tavolozza, usando il filtro Hue per la modifica del colore. Adesso è molto bene nei browser (tranne 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" />

Per consentire agli utenti di modificarlo in modo dinamico, utilizzando un colore di input per le modifiche o per trovare sfumature, dai un'occhiata a questo frammento:

Da: 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 filtrano documenti: https://developer.mozilla.org/en-us/docs/web/css/filter

OK, i segnaposto si comportano in modo diverso in browser diversi, quindi è necessario utilizzare il prefisso del browser nel tuo CSS per renderli identici, ad esempio Firefox dà una trasparenza ai segnaposto per impostazione predefinita, quindi è necessario aggiungere l'opacità 1 al tuo CSS, più il colore, non è una grande preoccupazione per la maggior parte delle volte, ma è bello averli coerenti:

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

Puoi cambiare il colore segnaposto di un input HTML5 con CSS. Se per caso, il tuo conflitto CSS, questo codice funziona, puoi usare (! IMPORTANTE) come di seguito.

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

Spero che questo ti aiuti.

Puoi usarlo per input e focus Style:

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

Il modo più semplice sarebbe:

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

Bussola Ha un mixin per questo fuori dalla scatola.

Prendi il tuo esempio:

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

E in SCSS usando la bussola:

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

Vedi i documenti per il mixin input-placeholder.

Ecco la soluzione con Selettori 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, battito (Safari, Google Chrome, Opera 15+) e Microsoft Edge stanno usando uno pseudo-elemento:
    ::-Webkit-Input-Holtrar.
  • Mozilla Firefox da 4 a 18 sta usando una classe pseudo:
    : -moz-placeholder (un colon).
    Mozilla Firefox 19+ sta usando uno pseudo-elemento:
    ::-Moz-placeholder, ma il vecchio selettore funzionerà ancora per un po '.
  • Internet Explorer 10 e 11 stanno usando una Pseudo-Classe:
    : -ms-Input-placeholder.
  • Internet Explorer 9 e inferiore non supporta affatto l'attributo segnaposto, mentre Opera 12 e Lower non supportano alcun selettore CSS per segnaposto.

Una parte di HTML:

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

Mostrerò come cambiare il colore dell'espressione di "Inserisci frase" di CSS:

  ::placeholder{
  color:blue;
   }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top