Signatur
Beschreibung
Die Eigenschaft sheet eines SVGStyleElement (also eines <style>-Elements innerhalb eines SVG-Dokuments oder Inline-SVGs) gibt das CSSStyleSheet-Objekt zurück, das der Browser aus dem Inhalt des Elements erzeugt hat. Die Eigenschaft stammt ursprünglich aus dem Mixin LinkStyle und verhält sich wie HTMLStyleElement.sheet.
Mit dem zurückgegebenen Stylesheet kannst du die CSS-Regeln zur Laufzeit auslesen (cssRules), ergänzen (insertRule()), entfernen (deleteRule()) oder das ganze Stylesheet über disabled ein- und ausschalten. Das ist nützlich für dynamische Themes, Hervorhebungen oder Animationen in SVG-Grafiken, ohne dass du für jedes Element einzeln Inline-Styles setzen musst.
Der Wert ist null, solange das Element nicht im Dokument eingehängt ist, oder wenn sein type-Attribut einen anderen Wert als text/css (bzw. leer) hat. Die Eigenschaft ist schreibgeschützt – du kannst ihr kein anderes Stylesheet zuweisen.
Rückgabewert
CSSStyleSheet oder null, wenn kein Stylesheet zugeordnet ist (z. B. Element nicht im DOM oder nicht unterstützter type).Beispiele
Regeln eines SVG-Stylesheets auslesen
// HTML: <svg id="grafik"><style>circle { fill: tomato; } rect { stroke: navy; }</style>...</svg>
const styleEl = document.querySelector('#grafik style');
const sheet = styleEl.sheet;
if (sheet) {
for (const rule of sheet.cssRules) {
console.log(rule.cssText);
}
}
Regel zur Laufzeit hinzufügen (Hover-Hervorhebung)
const svgNS = 'http://www.w3.org/2000/svg';
const svg = document.createElementNS(svgNS, 'svg');
const style = document.createElementNS(svgNS, 'style');
style.textContent = 'circle { fill: gray; }';
svg.append(style);
console.log(style.sheet); // noch nicht im DOM
document.body.append(svg);
style.sheet.insertRule('circle:hover { fill: gold; }', style.sheet.cssRules.length);
console.log(style.sheet.cssRules.length);
Theme per disabled umschalten
const darkTheme = document.querySelector('svg style#dark');
const button = document.querySelector('#theme-toggle');
button.addEventListener('click', () => {
const sheet = darkTheme.sheet;
if (!sheet) return;
sheet.disabled = !sheet.disabled;
console.log(`Dunkles Theme aktiv: ${!sheet.disabled}`);
});
// Wichtig · Fallstricke
- Immer auf
nullprüfen: Vor dem Einhängen in das Dokument oder bei einemtypeungleichtext/cssliefertsheetnull. Ein direkter Zugriff wiestyle.sheet.insertRule()wirft dann einenTypeError. - Neues Objekt bei Inhaltsänderung: Wenn du
textContentdes Elements änderst, erzeugt der Browser ein neuesCSSStyleSheet. Zuvor gespeicherte Referenzen und perinsertRule()eingefügte Regeln gehen dabei verloren. - Nur SVG-Namensraum: Ein
<style>, das perdocument.createElement('style')erzeugt wird, ist einHTMLStyleElement. Für einSVGStyleElementbrauchst ducreateElementNS('http://www.w3.org/2000/svg', 'style'). Beide besitzen aber eine gleichwertigesheet-Eigenschaft. - Geltungsbereich: Regeln in einem Inline-SVG-
<style>gelten für das gesamte HTML-Dokument, nicht nur für das SVG. Bei einem SVG, das über<img>oder<object>eingebunden ist, bleiben sie dagegen auf dieses SVG beschränkt. - Sicherheit: Baue Regeln für
insertRule()nicht ungeprüft aus Benutzereingaben zusammen. Sonst kann CSS eingeschleust werden, etwa um Daten über Attributselektoren abzugreifen. - Die Eigenschaft wird von allen modernen Browsern unterstützt (Chrome, Firefox, Safari, Edge).