Signatur
Beschreibung
Die Eigenschaft type der Schnittstelle CSSPseudoElement gibt an, welches Pseudo-Element ein Objekt darstellt. Der Wert ist eine Zeichenkette in Selektor-Schreibweise mit zwei Doppelpunkten, also etwa "::before", "::after" oder "::marker".
Ein CSSPseudoElement bekommt man über Element.prototype.pseudo(type). Diese Methode liefert das Pseudo-Element eines echten DOM-Elements als eigenes Objekt, an dem man z. B. Event-Listener anmelden oder Animationen starten kann (CSSPseudoElement erbt von EventTarget). Mit type lässt sich später feststellen, um welche Art Pseudo-Element es sich handelt. Das hilft vor allem in allgemeinem Code, der mehrere Pseudo-Elemente gleich behandelt, oder in Event-Handlern, die an mehreren Pseudo-Elementen hängen.
Zusammen mit CSSPseudoElement.element (dem zugehörigen Ursprungselement) lässt sich so ein Selektor wie div.card::before wieder zusammensetzen, etwa für Protokolle oder Werkzeuge zur Fehlersuche.
Rückgabewert
"::before". Die Eigenschaft ist schreibgeschützt.Beispiele
Pseudo-Element abrufen und Typ auslesen
const card = document.querySelector('.card');
// Funktionsprüfung: Element.pseudo() ist experimentell
if (typeof card.pseudo === 'function') {
const before = card.pseudo('::before');
console.log(before?.type);
} else {
console.log('CSSPseudoElement wird nicht unterstützt');
}
Selektor für Protokolle rekonstruieren
const describePseudo = (pseudo) => {
const el = pseudo.element;
const id = el.id ? `#${el.id}` : '';
const classes = [...el.classList].map((c) => `.${c}`).join('');
return `${el.localName}${id}${classes}${pseudo.type}`;
};
const list = document.querySelector('li.item');
if (list?.pseudo) {
const marker = list.pseudo('::marker');
if (marker) console.log(describePseudo(marker));
}
Gemeinsamer Handler für mehrere Pseudo-Elemente
const button = document.querySelector('#cta');
const handleClick = (event) => {
// event.currentTarget ist das CSSPseudoElement
switch (event.currentTarget.type) {
case '::before':
console.log('Icon links geklickt');
break;
case '::after':
console.log('Pfeil rechts geklickt');
break;
}
};
if (button?.pseudo) {
for (const sel of ['::before', '::after']) {
button.pseudo(sel)?.addEventListener('click', handleClick);
}
}
// Wichtig · Fallstricke
- Experimentell:
CSSPseudoElementundElement.pseudo()werden derzeit von keinem großen Browser stabil unterstützt (Firefox hatte zeitweise eine Umsetzung hinter einem Flag). Vor der Nutzung immer mittypeof el.pseudo === 'function'prüfen und eine Ausweichlösung vorsehen. - Schreibgeschützt: Eine Zuweisung wie
pseudo.type = '::after'hat keine Wirkung (im Strict-Modus gibt es einenTypeError). Für ein anderes Pseudo-Element ruft manelement.pseudo()erneut auf. - Schreibweise: Der Wert hat immer zwei Doppelpunkte (
"::before"), auch wenn im Stylesheet die alte Form mit einem Doppelpunkt (:before) steht. Werte deshalb nicht ohne einheitliche Schreibweise vergleichen. element.pseudo()gibt bei ungültigen oder nicht unterstützten Typennullzurück. Deshalb vor dem Zugriff auftypeoptionale Verkettung (?.) verwenden.- Den berechneten Stil eines Pseudo-Elements liest man browserübergreifend weiterhin mit
getComputedStyle(el, '::before')aus.