Signatur
Beschreibung
Die Eigenschaft HTMLLinkElement.sheet gibt das CSSStyleSheet-Objekt zurück, das zu einem <link>-Element gehört. Das gilt nur, wenn das Element ein Stylesheet einbindet (rel="stylesheet") und das Stylesheet erfolgreich geladen und geparst wurde. In allen anderen Fällen, etwa bei rel="icon", rel="preload", während des Ladens oder nach einem Ladefehler, ist der Wert null.
Über das zurückgegebene Objekt kommt man per CSSOM an die Regeln des Stylesheets. Man kann sie mit cssRules auslesen, mit insertRule() bzw. deleteRule() ändern oder das ganze Stylesheet über disabled ein- und ausschalten. Das eignet sich für Theme-Umschalter, zum Prüfen, ob ein Stylesheet wirklich geladen ist, und für Werkzeuge, die CSS zur Laufzeit untersuchen.
Die Eigenschaft ist schreibgeschützt. Man kann ihr kein anderes Stylesheet zuweisen. Um das Stylesheet zu wechseln, ändert man stattdessen das href-Attribut des Elements. Der Browser lädt die Datei dann neu und erzeugt ein neues CSSStyleSheet-Objekt.
Rückgabewert
CSSStyleSheet, oder null, wenn das Element kein Stylesheet einbindet, das Stylesheet noch lädt oder nicht geladen werden konnte.Beispiele
Stylesheet nach dem Laden auslesen
const link = document.createElement('link');
link.rel = 'stylesheet';
link.href = '/css/theme.css';
link.addEventListener('load', () => {
// Erst jetzt ist sheet belegt
console.log(link.sheet instanceof CSSStyleSheet);
console.log('Regeln:', link.sheet.cssRules.length);
});
link.addEventListener('error', () => {
console.log('Laden fehlgeschlagen, sheet =', link.sheet);
});
document.head.append(link);
console.log('Direkt nach append:', link.sheet);
Theme per disabled umschalten
// <link id="dark-theme" rel="stylesheet" href="/css/dark.css">
const darkLink = document.querySelector('#dark-theme');
const toggleDarkMode = () => {
const { sheet } = darkLink;
if (!sheet) {
console.warn('Dark-Theme noch nicht geladen');
return;
}
sheet.disabled = !sheet.disabled;
console.log('Dark-Mode aktiv:', !sheet.disabled);
};
document.querySelector('#toggle').addEventListener('click', toggleDarkMode);
Regel zur Laufzeit einfügen
const link = document.querySelector('link[rel="stylesheet"]');
const sheet = link?.sheet;
if (sheet) {
try {
const index = sheet.insertRule(
'.highlight { background: yellow; }',
sheet.cssRules.length
);
console.log('Regel eingefügt an Index', index);
} catch (err) {
// z. B. SecurityError bei Cross-Origin-Stylesheets
console.error(err.name, err.message);
}
}
// Wichtig · Fallstricke
- Timing: Direkt nach dem Einfügen des Elements ist
sheetmeist nochnull. Warten Sie auf dasload-Event, bevor Sie darauf zugreifen. - Cross-Origin: Bei Stylesheets von einer fremden Origin ohne CORS (
crossorigin-Attribut plus passenderAccess-Control-Allow-Origin-Header) istsheetzwar vorhanden. Ein Zugriff aufcssRulesoderinsertRule()wirft aber einenSecurityError. - Laufzeitänderungen über
insertRule()gehen verloren, wennhrefgeändert wird, weil dabei ein neuesCSSStyleSheetentsteht. - Bei
rel="alternate stylesheet"kann ein Stylesheet vorhanden, aber deaktiviert sein. Prüfen Sie dafürsheet.disabled. - Die Eigenschaft wird von allen modernen Browsern unterstützt. Das Gegenstück für
<style>-Elemente istHTMLStyleElement.sheet.