Start · Sprachen · JavaScript · Referenz · SVGStyleElement.media

SVGStyleElement.media

Eigenschaft

Liest oder setzt die Media-Query des <code>media</code>-Attributs eines SVG-<code>&lt;style&gt;</code>-Elements als String.

seit JavaScript Baseline: alle modernen Browser Kategorie: webapi

Signatur

SVGStyleElement.media

Beschreibung

Die Eigenschaft media des Interfaces SVGStyleElement spiegelt das Attribut media eines <style>-Elements innerhalb eines SVG-Dokuments wider. Der Wert ist eine Media-Query-Liste als String, zum Beispiel "screen and (min-width: 600px)" oder "print". Die Regeln im Stylesheet werden nur angewendet, wenn die Media-Query auf die aktuelle Ausgabeumgebung zutrifft.

Nützlich ist die Eigenschaft, wenn man Stile in inline eingebetteten oder eigenständigen SVG-Grafiken abhängig von der Umgebung schalten will, etwa eine vereinfachte Druckversion, Dark-Mode-Farben über (prefers-color-scheme: dark) oder eine andere Darstellung auf kleinen Bildschirmen. Weil man den Wert zur Laufzeit ändern kann, lassen sich ganze Stylesheets per Skript an- und abschalten, ohne einzelne Regeln anzufassen.

Fehlt das Attribut, gibt die Eigenschaft einen leeren String zurück. Für den Browser heißt das dasselbe wie "all": Das Stylesheet gilt immer. Beim Schreiben wird das Attribut media im DOM direkt mitgeändert, und der Browser prüft die Stile sofort neu.

Parameter

Name Typ Default Beschreibung
$value string "" Beim Setzen: eine Media-Query-Liste, z. B. "print" oder "(max-width: 400px)". Mehrere Queries werden mit Komma getrennt.

Rückgabewert

Typ
string
Beschreibung
Der aktuelle Wert des Attributs media. Ist das Attribut nicht gesetzt, ist es ein leerer String.

Beispiele

Media-Query eines SVG-Stylesheets auslesen

// HTML: <svg id="logo"><style media="print">circle { fill: black; }</style><circle r="20" cx="25" cy="25"/></svg>
const styleEl = document.querySelector('#logo style');
console.log(styleEl instanceof SVGStyleElement);
console.log(styleEl.media);
true print

Dark-Mode-Stile dynamisch aktivieren

const svgNS = 'http://www.w3.org/2000/svg';
const svg = document.querySelector('svg');

const darkStyle = document.createElementNS(svgNS, 'style');
darkStyle.textContent = 'rect { fill: #222; } text { fill: #eee; }';
darkStyle.media = '(prefers-color-scheme: dark)';
svg.prepend(darkStyle);

console.log(darkStyle.getAttribute('media'));
(prefers-color-scheme: dark)

Stylesheet per Button ein- und ausschalten

const styleEl = document.querySelector('svg style#highlight');
const toggle = document.querySelector('#toggle');

toggle.addEventListener('click', () => {
  // 'not all' trifft nie zu und deaktiviert damit das Stylesheet
  styleEl.media = styleEl.media === 'not all' ? 'all' : 'not all';
  console.log(`Highlight-Stile: ${styleEl.media === 'all' ? 'an' : 'aus'}`);
});
Highlight-Stile: aus

Prüfen, ob die Query aktuell zutrifft

const styleEl = document.querySelector('svg style');
const query = styleEl.media || 'all';
const aktiv = window.matchMedia(query).matches;
console.log(`Query "${query}" aktiv: ${aktiv}`);
Query "all" aktiv: true

// Wichtig · Fallstricke

  • Kein Syntaxcheck: Wenn man eine ungültige Media-Query setzt, wirft das keinen Fehler. Die Query wird dann als not all ausgewertet, das Stylesheet wird also einfach nicht angewendet. Vorher mit window.matchMedia() testen, ob sie wie erwartet funktioniert.
  • Leerer String: Ohne Attribut liefert die Eigenschaft "" und nicht "all". Man sollte also nicht auf "all" vergleichen.
  • Element im SVG-Namensraum: Dynamisch erzeugte Elemente brauchen document.createElementNS('http://www.w3.org/2000/svg', 'style'). Mit document.createElement('style') entsteht ein HTMLStyleElement. Das hat zwar auch eine Eigenschaft media, ist aber kein SVGStyleElement.
  • SVG als <img>: Wird die Grafik über <img> oder CSS background-image eingebunden, gelten die Media-Queries für den Bildbereich (z. B. dessen Breite) und nicht für das Browserfenster. Skripte laufen in diesem Fall gar nicht.
  • Kompatibilität: Wird von allen aktuellen Browsern unterstützt (Chrome, Firefox, Safari, Edge).