SVGStyleElement

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.

Die SVGStyleElement-Schnittstelle entspricht dem SVG-<style>-Element.

EventTarget Node Element SVGElement SVGStyleElement

Instanz-Eigenschaften

Diese Schnittstelle erbt auch Eigenschaften von ihrer Elternschnittstelle, SVGElement.

SVGStyleElement.type Veraltet

Ein String, der dem type-Attribut des angegebenen Elements entspricht.

SVGStyleElement.media

Ein String, der dem media-Attribut des angegebenen Elements entspricht.

SVGStyleElement.title

Ein String, der dem title-Attribut des angegebenen Elements entspricht.

SVGStyleElement.sheet Nur lesbar

Gibt das CSSStyleSheet-Objekt zurück, das mit dem angegebenen Element verknüpft ist, oder null, wenn keines vorhanden ist.

SVGStyleElement.disabled

Ein boolescher Wert, der angibt, ob das zugehörige Stylesheet deaktiviert ist oder nicht.

Instanz-Methoden

Diese Schnittstelle implementiert keine spezifischen Methoden, sondern erbt Methoden von ihrer Elternschnittstelle, SVGElement.

Beispiele

Dynamisches Hinzufügen eines SVG-Style-Elements

Um ein SVG-Style-Element (SVGStyleElement) dynamisch zu erstellen, müssen Sie Document.createElementNS() verwenden und ein style-Element im SVG-Namespace angeben.

Note: Document.createElement() kann nicht verwendet werden, um SVG-Style-Elemente zu erstellen (es gibt ein HTMLStyleElement zurück).

Angenommen, das folgende SVG-Element:

html
<svg
  xmlns="http://www.w3.org/2000/svg"
  xmlns:xlink="http://www.w3.org/1999/xlink">
  <circle cx="50" cy="50" r="25" />
</svg>

Sie können ein SVG-Style-Element wie folgt erstellen:

js
// Get the SVG element object by tag name
const svg = document.querySelector("svg");

// Create the `style` element in the SVG namespace
const style = document.createElementNS("http://www.w3.org/2000/svg", "style");
const node = document.createTextNode("circle { fill: red; }");
style.appendChild(node);

// Append the style element to the SVG element
svg.appendChild(style);

Zugriff auf ein bestehendes SVG-Style

Sie können auf ein SVG-Style-Element zugreifen, das in HTML (oder einer SVG-Datei) definiert wurde, indem Sie die normalen HTML-Methoden zum Abrufen von Tags, IDs usw. verwenden. Dazu gehören: Document.getElementsByTagName(), Document.getElementById(), Document.querySelector(), Document.querySelectorAll() und so weiter.

Zum Beispiel das folgende HTML, das eine SVG-Datei mit einem Style-Element definiert.

html
<svg
  xmlns="http://www.w3.org/2000/svg"
  xmlns:xlink="http://www.w3.org/1999/xlink">
  <style id="circle_style_id">
    circle {
      fill: gold;
      stroke: green;
      stroke-width: 3px;
    }
  </style>
  <circle cx="50" cy="50" r="25" />
</svg>

Um das erste style-Element im ersten svg-Element abzurufen, können Sie Document.querySelector() wie unten gezeigt verwenden.

js
const svg = document.querySelector("svg");
const style = svg.querySelector("style");

Alternativ können Sie Document.getElementById() verwenden und die Tag-ID angeben:

js
const svg = document.querySelector("svg");
const style = svg.getElementById("circle_style_id");

Oder einfach das Element mit der ID aus dem Dokument abrufen (in diesem Fall mit document.querySelector()):

js
const style = document.querySelector("#circle_style_id");

Eigenschaften abrufen und setzen

Dieses Beispiel zeigt, wie die Eigenschaften eines Style-Elements abgerufen und gesetzt werden, das in einer SVG-Definition angegeben wurde.

HTML

Das HTML enthält eine SVG-Definition für einen <circle> mit einem <style>-Element sowie ein HTML-<button>-Element, das verwendet wird, um den Stil ein- und auszuschalten, und ein HTML-<textarea>-Element zum Protokollieren der Eigenschaftswerte.

html
<button>Disable</button>
<textarea id="log" rows="6" cols="90"></textarea>
<svg
  xmlns="http://www.w3.org/2000/svg"
  xmlns:xlink="http://www.w3.org/1999/xlink">
  <style id="circle_style_id" media="all and (min-width: 600px)">
    circle {
      fill: gold;
      stroke: green;
      stroke-width: 3px;
    }
  </style>
  <circle cx="60" cy="60" r="50" />
</svg>

Beachten Sie, dass oben das media-Attribut auf dem style-Tag gesetzt wurde. Type wurde nicht gesetzt, da es veraltet ist, und disabled, da es kein solches Attribut gibt (nur die Eigenschaft auf dem Element).

JavaScript

Der folgende Code ruft das style-Element (ein SVGStyleElement) anhand seiner ID ab.

js
const svg = document.querySelector("svg");
const style = svg.getElementById("circle_style_id");

Wir fügen dann eine Funktion hinzu, um die Stil-Eigenschaften zu protokollieren. Diese wird nach der Initialisierung aufgerufen, wenn sich die Rahmen größe ändert und wenn der Knopf gedrückt wird.

js
// Get logging text area
const log = document.getElementById("log");

function setLogText() {
  //Log current values of properties
  log.value = `style.media: ${style.media} (frame width: ${window.innerWidth})\n`; // 'all' by default
  log.value += `style.title: ${style.title}\n`; // no default value
  log.value += `style.disabled: ${style.disabled}\n`; // 'false' by default
  log.value += `style.type: ${style.type}\n`; // deprecated (do not use)
  log.value += `style.sheet.rules[0].cssText: ${style.sheet.rules[0].cssText}\n`;
}

// Log initial property values
setLogText();

// Log when the frame resizes
addEventListener("resize", () => {
  setLogText();
});

Zum Schluss setzen wir einen Ereignishandler für den Knopf. Wenn der Knopf angeklickt wird, wird die disabled-Eigenschaft umgeschaltet. Dies aktualisiert auch das Protokoll und den Knopftext.

js
const button = document.querySelector("button");

button.addEventListener("click", () => {
  style.disabled = !style.disabled;
  button.textContent = style.disabled ? "Enable" : "Disable";

  // Log after button presses
  setLogText();
});

Ergebnis

Das Ergebnis wird unten gezeigt. Klicken Sie auf den Knopf, um das SVG-Style-Element ein- und auszuschalten. Wenn der SVG-Stil nicht deaktiviert ist, können Sie auch die Fensterbreite ändern, um die Wirkung der media-Eigenschaft auf den Stil zu sehen, wenn der Rahmen, der das Live-Beispiel enthält, 600px breit ist.

Spezifikationen

Specification
Scalable Vector Graphics (SVG) 2
# InterfaceSVGStyleElement

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch