Signatur
Beschreibung
Die schreibgeschützte Eigenschaft parentStyleSheet der Schnittstelle StyleSheet verweist auf das übergeordnete Stylesheet. Das gilt, wenn das aktuelle Stylesheet über eine @import-Regel in ein anderes Stylesheet eingebunden wurde. Stylesheets, die direkt über <link rel="stylesheet"> oder <style> ins Dokument kommen, haben kein Eltern-Stylesheet. Bei ihnen ist der Wert null.
Die Eigenschaft ist nützlich, um die Import-Hierarchie von CSS-Dateien zur Laufzeit nachzuvollziehen. Das hilft bei Debugging-Werkzeugen, beim Auswerten von Stilquellen oder beim Finden des Stylesheets der obersten Ebene (und damit seines ownerNode).
Ein importiertes Stylesheet erreicht man über CSSImportRule.styleSheet. Dessen parentStyleSheet zeigt dann wieder auf das Stylesheet, das die @import-Regel enthält. Die Eigenschaft ist verwandt mit CSSRule.parentStyleSheet, aber nicht dasselbe. Letztere liefert das Stylesheet, zu dem eine einzelne Regel gehört.
Rückgabewert
@import einbindet, oder null, wenn es direkt im Dokument eingebunden ist.Beispiele
Stylesheets der obersten Ebene prüfen
// Alle direkt eingebundenen Stylesheets haben kein Eltern-Stylesheet
for (const sheet of document.styleSheets) {
console.log(sheet.href ?? '(inline)', sheet.parentStyleSheet);
}
Importierte Stylesheets und ihr Eltern-Stylesheet
// main.css enthält: @import url("theme.css");
const main = [...document.styleSheets].find(s => s.href?.endsWith('main.css'));
for (const rule of main.cssRules) {
if (rule instanceof CSSImportRule && rule.styleSheet) {
const imported = rule.styleSheet;
console.log(imported.href);
console.log(imported.parentStyleSheet === main);
}
}
Stylesheet der obersten Ebene und sein DOM-Knoten finden
const getRootSheet = (sheet) => {
let current = sheet;
while (current.parentStyleSheet) {
current = current.parentStyleSheet;
}
return current;
};
// Beispiel: tief importiertes Stylesheet
const main = document.styleSheets[0];
const importRule = [...main.cssRules].find(r => r instanceof CSSImportRule);
const nested = importRule?.styleSheet;
if (nested) {
const root = getRootSheet(nested);
console.log(root === main); // true
console.log(root.ownerNode.tagName); // LINK oder STYLE
}
// Wichtig · Fallstricke
- Nur lesbar: Eine Zuweisung an
parentStyleSheetwird ignoriert. Im Strict Mode löst sie einenTypeErroraus. - Bei importierten Stylesheets ist
ownerNodeimmernull. Den zugehörigen DOM-Knoten findet man nur über das Stylesheet der obersten Ebene (siehe Beispiel 3). CSSImportRule.styleSheetkannnullsein, etwa wenn der Import fehlschlug oder die Medienabfrage nicht zutrifft und der Browser das Stylesheet nicht geladen hat. Diesen Fall immer abfangen.- Bei Stylesheets von einem anderen Ursprung (Cross-Origin) ohne CORS-Freigabe wirft der Zugriff auf
cssRuleseinenSecurityError. Dann lassen sich auch keine importierten Stylesheets ermitteln. - Stylesheets, die mit
new CSSStyleSheet()erzeugt werden (Constructable Stylesheets), haben immerparentStyleSheet === null. Sie erlauben ohnehin kein@import. - Die Eigenschaft wird seit vielen Jahren von allen gängigen Browsern unterstützt.