:before
e :after
não precisam funcionar para elementos substituídos, e as especificações CSS não especificam como funcionariam para eles, e o conceito de elemento substituído é um tanto vago.
A especificação CSS 2.1 sugere claramente que eles podem funcionar para elementos substituídos, apenas dizendo que não "define totalmente" como. Isso está relacionado ao problema de que um elemento substituído deve ter sua própria renderização visual, que não é controlada por CSS, enquanto os pseudoelementos devem adicionar algo ao conteúdo do elemento. A especificação acrescenta que isso será definido “com mais detalhes” em uma especificação futura, mas isso não ocorreu até agora.
Os fornecedores de navegadores decidiram evitar problemas ao não implementar esses pseudo-elementos para alguns elementos.
Não está claro o que significa “elemento substituído”, e o significado parece ter mudado um pouco. Muitas vezes é interpretado como significando o mesmo que um elemento vazio (um elemento com EMPTY
conteúdo declarado, ou seja, um elemento que não pode ter nenhum conteúdo), mas o próprio CSS 2.1 mostra uma folha de estilo de amostra com o seletor br:before
(embora os navegadores tenham ignorado isso, implementando br
seus próprios maneira). Pode-se argumentar que mais e mais elementos foram movidos para o escopo da renderização CSS, pelo menos em parte. Por exemplo, um input
elemento (incluindo sua fonte, cores, etc.) é amplamente controlável com CSS em navegadores modernos.
Os navegadores atuais (Firefox, IE, Chrome) não parecem suportar o :after
e :before
pseudo-elementos para fins diferentes elementos vazios hr
. Pois hr
, o IE e o Chrome colocam o conteúdo gerado dentro de uma caixa delimitada, que é a implementação de hr
; o conteúdo torna a caixa mais alta. O Firefox coloca o conteúdo de ambos (!) Pseudo-elementos após a regra horizontal que é sua implementação hr
. Esta variação ilustra os tipos de problemas de “interação” mencionados no CSS 2.1.
Freqüentemente, afirma-se que esses pseudo-elementos não podem ser usados para elementos vazios, pois suas definições HTML não permitem nenhum conteúdo. Este é um erro de categoria. As regras de sintaxe de uma linguagem de marcação não restringem o que você pode fazer em CSS
Para concluir, :after
e :before
atualmente não são utilizáveis para elementos vazios (exceto marginalmente para hr
), mas isso é principalmente devido a implementações e pode mudar no futuro.
<before></before>
" na fonte.