:before
e :after
non sono tenuti a lavorare per elementi sostituiti e le specifiche CSS non specificano come funzionerebbero per loro, e il concetto di elemento sostituito è alquanto vago.
La specifica CSS 2.1 suggerisce chiaramente che possono funzionare per elementi sostituiti, semplicemente dicendo che non "definisce completamente" come. Ciò si riferisce al problema per cui ci si aspetta che un elemento sostituito abbia il proprio rendering visivo, che non è controllato dai CSS, mentre gli pseudo-elementi dovrebbero aggiungere qualcosa al contenuto dell'elemento. La specifica aggiunge che questo sarà definito "in modo più dettagliato" in una specifica futura, ma finora non è avvenuto.
I fornitori di browser hanno semplicemente deciso di evitare problemi non implementando affatto questi pseudo-elementi per alcuni elementi.
Non è affatto chiaro cosa significhi "elemento sostituito" e il significato sembra essere leggermente cambiato. Viene spesso interpretato nel senso che significa lo stesso di un elemento vuoto (un elemento con EMPTY
contenuto dichiarato, cioè un elemento che non può avere alcun contenuto), ma CSS 2.1 stesso mostra un foglio di stile di esempio con il selettore br:before
(sebbene i browser lo abbiano ignorato, implementando br
il proprio modo). Si può sostenere che sempre più elementi sono entrati nell'ambito del rendering CSS, almeno in parte. Ad esempio, un input
elemento (inclusi il carattere, i colori, ecc.) È ampiamente controllabile con CSS nei browser moderni.
Browser attuali (Firefox, IE, Chrome) non sembrano sostenere l' :after
e :before
pseudo-elementi per elementi vuoti diversi hr
. Per hr
IE e Chrome posizionano il contenuto generato all'interno di una casella delimitata, che è l'implementazione di hr
; il contenuto rende la scatola più alta. Firefox colloca il contenuto di entrambi (!) Pseudo-elementi dopo la regola orizzontale di cui è implementata hr
. Questa variazione illustra i tipi di problemi di "interazione" a cui si fa riferimento in CSS 2.1.
Si afferma spesso che questi pseudo-elementi non possono essere utilizzati per elementi vuoti poiché le loro definizioni HTML non consentono alcun contenuto. Questo è un errore di categoria. Le regole di sintassi di un linguaggio di markup non limitano ciò che puoi fare in CSS
Per concludere, :after
e :before
attualmente non sono utilizzabili per elementi vuoti (eccetto marginalmente per hr
), ma ciò è dovuto principalmente alle implementazioni e potrebbero cambiare in futuro.
<before></before>
" nella sorgente.