Signatur
Beschreibung
Die Eigenschaft cssText eines CSSRule-Objekts gibt die Regel als String zurück, also Selektor bzw. At-Rule-Vorspann und den Deklarationsblock. Bei gruppierenden Regeln wie CSSMediaRule, CSSSupportsRule oder CSSKeyframesRule sind alle verschachtelten Regeln mit enthalten.
Der Text ist nicht der Originalquelltext aus der CSS-Datei. Der Browser erzeugt ihn neu aus dem geparsten Objektmodell (CSSOM). Deshalb fehlen Kommentare, Leerzeichen werden vereinheitlicht, ungültige oder unbekannte Deklarationen entfallen, und Werte können umgeschrieben sein, zum Beispiel #f00 zu rgb(255, 0, 0), oder Kurzschreibweisen werden aufgelöst bzw. zusammengefasst.
Typische Anwendungen: Debugging, dynamisch erzeugte Stylesheets als Text exportieren (etwa bei Server-Side-Rendering oder CSS-in-JS), Regeln durchsuchen oder aktive Stile in Entwicklerwerkzeugen anzeigen. Für Änderungen ist cssText praktisch nur lesbar. Eine Regel ändert man über rule.style (CSSStyleDeclaration) oder man ersetzt sie mit deleteRule() und insertRule().
Rückgabewert
Beispiele
Alle Regeln eines Stylesheets ausgeben
const style = document.createElement('style');
style.textContent = `
/* Kommentar verschwindet */
.btn { color: red; padding: 4px 8px; }
@media (max-width: 600px) { .btn { padding: 2px; } }
`;
document.head.append(style);
for (const rule of style.sheet.cssRules) {
console.log(rule.cssText);
}
Konstruiertes Stylesheet als CSS-Text exportieren
const sheet = new CSSStyleSheet();
sheet.insertRule('.card { border-radius: 8px; }');
sheet.insertRule('.card:hover { opacity: 0.9; }', 1);
// z. B. für SSR oder zum Herunterladen
const cssString = [...sheet.cssRules]
.map((rule) => rule.cssText)
.join('\n');
console.log(cssString);
Schreiben bewirkt nichts, stattdessen Regel ersetzen
const sheet = new CSSStyleSheet();
sheet.insertRule('h1 { color: blue; }');
const rule = sheet.cssRules[0];
rule.cssText = 'h1 { color: green; }'; // wird ignoriert
console.log(rule.cssText);
// Möglichkeit 1: Deklaration über style ändern
rule.style.color = 'green';
console.log(rule.cssText);
// Möglichkeit 2: Regel komplett ersetzen
sheet.deleteRule(0);
sheet.insertRule('h1 { color: purple; font-weight: 400; }', 0);
console.log(sheet.cssRules[0].cssText);
Regeln nach Selektor durchsuchen
const findRules = (selectorPart) =>
[...document.styleSheets].flatMap((sheet) => {
try {
return [...sheet.cssRules].filter((r) => r.cssText.includes(selectorPart));
} catch {
return []; // Cross-Origin-Stylesheet, nicht lesbar
}
});
findRules('.btn').forEach((r) => console.log(r.cssText));
// Wichtig · Fallstricke
- Praktisch nur lesbar: Laut CSSOM-Spezifikation hat das Setzen von
CSSRule.cssTextkeine Wirkung. Ältere Browser konnten dabei Ausnahmen werfen. Nicht verwechseln mitCSSStyleDeclaration.cssText(z. B.element.style.cssTextoderrule.style.cssText): Diese Eigenschaft ist beschreibbar. - Serialisierung ist browserabhängig: Leerzeichen, Zeilenumbrüche, Farbschreibweisen und die Behandlung von Kurzschreibweisen unterscheiden sich zwischen Chrome, Firefox und Safari. Deshalb nie exakte Strings vergleichen, zum Beispiel in Tests.
- Informationsverlust: Kommentare, ungültige Deklarationen, Browser-Hacks und unbekannte Präfix-Eigenschaften fehlen in der Ausgabe. Als verlustfreie Quelle für den Originalquelltext taugt
cssTextnicht. - Cross-Origin: Bei Stylesheets von fremden Origins ohne CORS-Freigabe wirft schon der Zugriff auf
sheet.cssRuleseinenSecurityError. Solche Zugriffe gehören intry/catch. - Leistung: Jeder Zugriff serialisiert die Regel neu. Bei großen Stylesheets sollte man ihn nicht in Schleifen oder Animationen wiederholen.