Bem, tecnicamente, não é possível obter :before
e :after
pseudo elementos trabalharem em input
elementos
Do W3C :
12.1 Os pseudoelementos: before e: after
Os autores especificam o estilo e a localização do conteúdo gerado com os pseudoelementos: before e: after. Como seus nomes indicam, os pseudoelementos: before e: after especificam o local do conteúdo antes e depois do conteúdo da árvore de documentos de um elemento. A propriedade 'content', em conjunto com esses pseudoelementos, especifica o que é inserido.
Então, eu tinha um projeto onde eu tinha botões de envio na forma de input
tags e, por algum motivo os outros desenvolvedores restringiu-me a usar <button>
as tags em vez da entrada de costume enviar botões, então eu vim com uma outra solução, de envolver os botões dentro de um span
conjunto a position: relative;
e, em seguida, absolutamente posicionar o ícone usando :after
pseudo.
Nota: O violino de demonstração usa o código de conteúdo do FontAwesome 3.2.1, portanto, pode ser necessário alterar o valor da content
propriedade de acordo.
HTML
<span><input type="submit" value="Send" class="btn btn-default" /></span>
CSS
input[type="submit"] {
margin: 10px;
padding-right: 30px;
}
span {
position: relative;
}
span:after {
font-family: FontAwesome;
content: "\f004"; /* Value may need to be changed in newer version of font awesome*/
font-size: 13px;
position: absolute;
right: 20px;
top: 1px;
pointer-events: none;
}
Demo
Agora, aqui tudo é auto-explicativo aqui, sobre uma propriedade pointer-events: none;
, ou seja , eu usei isso porque, ao passar o mouse sobre o :after
conteúdo pseudo-gerado, seu botão não clicará, portanto, usar o valor de none
forçará a ação de clique a passar pelo conteúdo .
Da Rede de Desenvolvedores Mozilla :
Além de indicar que o elemento não é o destino dos eventos do mouse, o valor none instrui o evento do mouse a "passar" pelo elemento e segmentar o que estiver "embaixo" desse elemento.
Passe o mouse sobre a fonte / ícone do coração Demoe veja o que acontece se você NÃO usarpointer-events: none;