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-placeholder
mas 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 placeholder
atributo, 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 padding
em um input
nã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: 1
aqui.
- Observe que o texto do espaço reservado é cortado apenas se não couber - dimensione seus elementos de entrada
em
e 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
placeholder
mas sem suporte a CSS para isso (como o Opera) também devem ser testados.
- Alguns navegadores usam CSS padrão adicional para alguns
input
tipos ( email
, search
). Isso pode afetar a renderização de maneiras inesperadas. Use as propriedades -webkit-appearance
e -moz-appearance
para mudar isso. Exemplo:
[type="search"] {
-moz-appearance: textfield;
-webkit-appearance: textfield;
appearance: textfield;
}