Signatur
Beschreibung
Pseudoelemente wie ::before, ::after oder ::marker werden per CSS erzeugt, tauchen aber nicht als Knoten im DOM-Baum auf. Mit CSSPseudoElement gibt es für sie trotzdem ein eigenes Objekt, das auf das Pseudoelement verweist. So kann man es in Skripten gezielt ansprechen, etwa als Ziel für Animationen oder Ereignisse (das Interface erbt von EventTarget).
Einen Konstruktor gibt es nicht. Instanzen bekommt man über die Methode Element.prototype.pseudo(type), zum Beispiel mit element.pseudo('::before'). Das Interface hat folgende Mitglieder:
type(nur lesbar,string): der Selektor des Pseudoelements, z. B."::before".element(nur lesbar,Element): das ursprüngliche Element, zu dem das Pseudoelement gehört.parent(nur lesbar,Element | CSSPseudoElement): das übergeordnete Objekt. Bei verschachtelten Pseudoelementen wie::before::markerist das ein anderesCSSPseudoElement.pseudo(type): gibt ein verschachteltes Pseudoelement zurück, falls es eines gibt, sonstnull.
In der Praxis ist das Interface noch experimentell. Wer heute Pseudoelemente mit JavaScript animieren oder untersuchen will, nutzt die breit unterstützten Alternativen: die Option pseudoElement von Element.animate() bzw. KeyframeEffect sowie getComputedStyle(element, '::before').
Rückgabewert
Element.prototype.pseudo(type). Wird das Pseudoelement nicht unterstützt oder ist der Typ ungültig, ist der Rückgabewert null.Beispiele
Unterstützung prüfen und ::before-Objekt holen
const badge = document.querySelector('.badge');
if (typeof badge.pseudo === 'function') {
const before = badge.pseudo('::before');
if (before) {
console.log(before.type); // Selektor des Pseudoelements
console.log(before.element === badge); // ursprüngliches Element
}
} else {
console.log('CSSPseudoElement wird nicht unterstützt');
}
Pseudoelement animieren – mit sicherem Fallback
const button = document.querySelector('.cta');
const keyframes = [
{ transform: 'scale(1)', opacity: 1 },
{ transform: 'scale(1.4)', opacity: 0 }
];
const timing = { duration: 600, iterations: Infinity };
// Breit unterstützter Weg: Option pseudoElement von Element.animate()
const animation = button.animate(keyframes, { ...timing, pseudoElement: '::after' });
console.log(animation.effect.pseudoElement);
Styles eines Pseudoelements auslesen
const quote = document.querySelector('blockquote');
// Funktioniert in allen Browsern, auch ohne CSSPseudoElement
const styles = getComputedStyle(quote, '::before');
console.log(styles.content);
// Mit CSSPseudoElement (experimentell): Beziehung zum Elternobjekt prüfen
const pseudo = quote.pseudo?.('::before');
if (pseudo) {
console.log(pseudo.parent === quote);
}
// Wichtig · Fallstricke
Kompatibilität: CSSPseudoElement und Element.prototype.pseudo() sind experimentell. Sie waren bisher nur hinter Flags verfügbar, etwa in Firefox über dom.css_pseudo_element.enabled. In produktivem Code immer zuerst prüfen, ob die Funktion existiert (z. B. mit typeof el.pseudo === 'function' oder mit optionaler Verkettung el.pseudo?.()), und eine Alternative vorsehen.
- Es gibt keinen öffentlichen Konstruktor.
new CSSPseudoElement()wirft einenTypeError. - Pseudoelemente sind keine DOM-Knoten.
querySelector('::before')findet sie nicht, und sie kommen weder inchildrennoch inchildNodesvor. - Ein
::beforeoder::afterwird nur angezeigt, wenn einecontent-Eigenschaft gesetzt ist. Obpseudo()für nicht angezeigte Pseudoelemente trotzdem ein Objekt liefert, hängt von der Implementierung ab. - Als Alternative zum Animieren taugen
Element.animate(..., { pseudoElement })undKeyframeEffect.pseudoElement, zum AuslesengetComputedStyle(el, '::before'). Beide sind in allen modernen Browsern verfügbar.