Ich habe Probleme, das Verhalten der CSS- :after
Eigenschaft zu verstehen . Entsprechend der Spezifikation ( hier und hier ):
Wie ihre Namen anzeigen, geben die
:before
und:after
-Elemente den Speicherort des Inhalts vor und nach dem Dokumentbauminhalt eines Elements an.
Dies scheint keine Einschränkungen zu setzen, welche Elemente eine :after
(oder :before
) Eigenschaft haben können. Es scheint jedoch nur mit bestimmten Elementen zu<p>
funktionieren ... funktioniert, <img>
nicht, <input>
nicht, <table>
tut. Ich könnte mehr testen, aber der Punkt ist gemacht. Beachten Sie, dass dies in allen Browsern ziemlich konsistent erscheint. Was bestimmt, ob ein Objekt eine :before
und :after
-Eigenschaft akzeptieren kann ?
quelle
<before></before>
" in der Quelle finden könnten .<before></before>
. Ich hätte sagen sollen "so tun als ob DOM" oder so. Es ging darum, das zu zeigen:before
und:after
sich innerhalb des Elements zu befinden, nicht außerhalb.:before
und:after
funktioniert nicht für ersetzte Elemente. es heißt nur, dass es nicht „vollständig definiert“, wie und dass dies in Zukunft definiert wird (was bisher noch nicht geschehen ist). Was in DOM passiert, spielt hier keine Rolle. Während Browser diese Pseudoelemente für einige Elemente nicht unterstützen, steht dies nicht in den Spezifikationen, sondern nur für die Implementierungen.::before
und::after
arbeite nicht für leere (leere) Elemente, die niemals tatsächlichen Inhalt haben, bevor / nach denen sie angewendet werden könnten. Überraschenderweise funktionieren siehr
in fast allen Browsern für Elemente.: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 Selektorbr:before
(obwohl Browser dies ignoriert haben undbr
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 eininput
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ützenhr
. Fürhr
, IE und Chrome den erzeugten Inhalt in einer begrenzten Box platzieren, die die Durchführung isthr
; Der Inhalt macht die Box größer. Firefox platziert den Inhalt beider (!) Pseudoelemente nach der horizontalen Regel, deren Implementierung es isthr
. 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ürhr
), aber dies ist im Wesentlichen auf Implementierungen und kann sich in Zukunft ändern.quelle
Elemente ohne schließendes Tag sind ungültige Elemente und können keinen Inhalt anzeigen:
https://www.w3.org/TR/html5/syntax.html#void-elements
In allen Blink-, Webkit- und Quantum-Browsern können Sie Pseudoelemente nur in Kontrollkästchen erstellen. Dies ist jedoch umstritten, da keine Spezifikation dieses Verhalten zulässt.
Hier ein Beispiel: https://codepen.io/equinusocio/pen/BOBaEM/
quelle