Implementação
Existem três implementações diferentes: pseudoelementos, pseudoclasses e nada.
- WebKit, Blink (Safari, Google Chrome, Opera 15+) e Microsoft Edge estiver usando um pseudo-elemento:
::-webkit-input-placeholder. [ Ref ]
- O Mozilla Firefox 4 a 18 está usando uma pseudo-classe:
:-moz-placeholder( um cólon). [ Ref ]
- O Mozilla Firefox 19+ está usando um pseudo-elemento:,
::-moz-placeholdermas o seletor antigo ainda funcionará por um tempo. [ Ref ]
- Internet Explorer 10 e 11 está usando um pseudo-classe:
:-ms-input-placeholder. [ Ref ]
- Abril de 2017: a maioria dos navegadores modernos suporta o pseudoelemento simples
::placeholder [ Ref ]
O Internet Explorer 9 e inferior não suportam o placeholderatributo, enquanto o Opera 12 e inferior não suportam nenhum seletor CSS para espaços reservados.
A discussão sobre a melhor implementação ainda está em andamento. Observe que os pseudoelementos agem como elementos reais no DOM da sombra . A paddingem um inputnão terá a mesma cor de fundo do pseudo-elemento.
Seletores CSS
Os agentes do usuário são obrigados a ignorar uma regra com um seletor desconhecido. Consulte Seletores Nível 3 :
um grupo de seletores contendo um seletor inválido é inválido.
Portanto, precisamos de regras separadas para cada navegador. Caso contrário, o grupo inteiro seria ignorado por todos os navegadores.
::-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!">
Notas de uso
- Tenha cuidado para evitar maus contrastes. O espaço reservado do Firefox parece estar em falta com uma opacidade reduzida, por isso precisa ser usado
opacity: 1aqui.
- Observe que o texto do espaço reservado é cortado apenas se não couber - dimensione seus elementos de entrada
eme teste-os com grandes configurações de tamanho mínimo de fonte. Não se esqueça das traduções: alguns idiomas precisam de mais espaço para a mesma palavra.
- Navegadores com suporte a HTML para
placeholdermas sem suporte a CSS para isso (como o Opera) também devem ser testados.
- Alguns navegadores usam CSS padrão adicional para alguns
inputtipos ( email, search). Isso pode afetar a renderização de maneiras inesperadas. Use as propriedades -webkit-appearance e -moz-appearancepara mudar isso. Exemplo:
[type="search"] {
-moz-appearance: textfield;
-webkit-appearance: textfield;
appearance: textfield;
}