:before
y :after
no es necesario que funcionen para elementos reemplazados, y las especificaciones CSS no especifican cómo funcionarían para ellos, y el concepto de elemento reemplazado es algo vago.
La especificación CSS 2.1 sugiere claramente que pueden funcionar para elementos reemplazados, simplemente diciendo que no "define completamente" cómo. Esto se relaciona con el problema de que se espera que un elemento reemplazado tenga su propia representación visual, que no está controlada por CSS, mientras que los pseudoelementos deberían agregar algo al contenido del elemento. La especificación agrega que esto se definirá "con más detalle" en una especificación futura, pero esto no ha ocurrido hasta ahora.
Los proveedores de navegadores simplemente decidieron evitar problemas al no implementar estos pseudoelementos para algunos elementos.
No está nada claro qué significa "elemento reemplazado", y el significado parece haber cambiado un poco. A menudo se interpreta que significa lo mismo que elemento vacío (un elemento con EMPTY
contenido declarado, es decir, un elemento que no puede tener ningún contenido), pero CSS 2.1 muestra una hoja de estilo de muestra con el selector br:before
(aunque los navegadores han ignorado esto, implementando br
su propio camino). Se puede argumentar que cada vez más elementos se han movido al alcance de la representación CSS, al menos en parte. Por ejemplo, un input
elemento (incluida su fuente, colores, etc.) se puede controlar en gran medida con CSS en los navegadores modernos.
No parecen navegadores (Firefox, IE, Chrome) para apoyar el :after
y :before
pseudo-elementos para los elementos vacíos distintos hr
. Porque hr
, IE y Chrome colocan el contenido generado dentro de un cuadro con borde, que es la implementación de hr
; el contenido hace que la caja sea más alta. Firefox coloca el contenido de ambos (!) Pseudoelementos después de la regla horizontal que es su implementación hr
. Esta variación ilustra los tipos de problemas de "interacción" a los que se hace referencia en CSS 2.1.
A menudo se afirma que estos pseudoelementos no se pueden utilizar para elementos vacíos ya que sus definiciones HTML no permiten ningún contenido. Este es un error de categoría. Las reglas de sintaxis de un lenguaje de marcado no restringen lo que puede hacer en CSS
Para concluir, :after
y :before
actualmente no son utilizables para los elementos vacíos (excepto marginalmente a hr
), pero esto se debe principalmente a las implementaciones y puede cambiar en el futuro.
<before></before>
" en la fuente.