:before
und :after
sind nicht erforderlich für ersetzte Elemente zu arbeiten, und CSS - Spezifikationen nicht angeben , wie sie für sie arbeiten würden, und das Konzept des ersetzten Elements ist etwas vage.
Die CSS 2.1-Spezifikation legt klar nahe, dass sie für ersetzte Elemente funktionieren können , und sagt nur, dass sie nicht vollständig definiert, wie. Dies bezieht sich auf das Problem, dass von einem ersetzten Element ein eigenes visuelles Rendering erwartet wird, das nicht von CSS gesteuert wird, während die Pseudoelemente dem Inhalt des Elements etwas hinzufügen sollten. Die Spezifikation fügt hinzu, dass dies in einer zukünftigen Spezifikation "detaillierter" definiert wird, aber dies hat bisher nicht stattgefunden.
Browser-Anbieter haben nur beschlossen, Probleme zu vermeiden, indem sie diese Pseudoelemente für einige Elemente überhaupt nicht implementiert haben.
Es ist überhaupt nicht klar, was "ersetztes Element" bedeutet, und die Bedeutung scheint sich etwas geändert zu haben. Es wird oft so interpretiert, dass es dasselbe bedeutet wie ein leeres Element (ein Element mit EMPTY
deklariertem Inhalt, dh ein Element, das keinen Inhalt haben kann), aber CSS 2.1 selbst zeigt ein Beispiel-Stylesheet mit dem Selektor br:before
(obwohl Browser dies ignoriert haben und br
ihr eigenes implementieren Weg). Es kann argumentiert werden, dass immer mehr Elemente zumindest teilweise in den Bereich des CSS-Renderings gerückt sind. Beispielsweise kann ein input
Element (einschließlich Schriftart, Farben usw.) in modernen Browsern weitgehend mit CSS gesteuert werden.
Aktuelle Browser (Firefox, IE, Chrome) scheinen die :after
und :before
Pseudo-Elemente für andere leere Elemente als nicht zu unterstützen hr
. Für hr
, IE und Chrome den erzeugten Inhalt in einer begrenzten Box platzieren, die die Durchführung ist hr
; Der Inhalt macht die Box größer. Firefox platziert den Inhalt beider (!) Pseudoelemente nach der horizontalen Regel, deren Implementierung es ist hr
. Diese Variante veranschaulicht die Arten von Interaktionsproblemen, auf die in CSS 2.1 Bezug genommen wird.
Es wird oft behauptet, dass diese Pseudoelemente nicht für leere Elemente verwendet werden können, da ihre HTML-Definitionen keinen Inhalt zulassen. Dies ist ein Kategoriefehler. Die Syntaxregeln einer Auszeichnungssprache schränken nicht ein, was Sie in CSS tun können
Zum Abschluss :after
und :before
sind derzeit nicht verwendbar für leere Elemente (außer geringfügig für hr
), aber dies ist im Wesentlichen auf Implementierungen und kann sich in Zukunft ändern.
<before></before>
" in der Quelle finden könnten .