Dokument: adoptedStyleSheets-Eigenschaft

Baseline 2023
Newly available

Since March 2023, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.

Die adoptedStyleSheets-Eigenschaft der Document-Schnittstelle wird verwendet, um ein Array von konstruierten Stylesheets festzulegen, die vom Dokument verwendet werden sollen.

Hinweis: Ein konstruiertes Stylesheet ist ein Stylesheet, das programmgesteuert mit dem CSSStyleSheet() constructor erstellt wurde (im Gegensatz zu einem, das von einem User-Agent erstellt wird, wenn ein Stylesheet aus einem Skript importiert, durch <style> oder @import importiert oder über <link> verlinkt wird).

Die gleichen konstruierten Stylesheets können auch mit einer oder mehreren ShadowRoot-Instanzen über die ShadowRoot.adoptedStyleSheets-Eigenschaft geteilt werden. Änderungen an einem adoptierten Stylesheet wirken sich auf alle Objekte aus, die dieses Stylesheet übernehmen.

Stylesheets in dieser Eigenschaft werden zusammen mit den anderen Stylesheets des Dokuments unter Verwendung des CSS-Kaskadenalgorithmus ausgewertet. Wenn die Auflösung von Regeln die Reihenfolge von Stylesheets berücksichtigt, wird davon ausgegangen, dass adoptedStyleSheets nach denen in Document.styleSheets angeordnet sind.

Nur mit dem CSSStyleSheet() constructor im Kontext des aktuellen Document erstellte Stylesheets können übernommen werden.

Wert

Der Wert ist ein Array von CSSStyleSheet-Instanzen, die mit dem CSSStyleSheet()-Constructor im Kontext desselben Document erstellt worden sein müssen.

Wenn das Array geändert werden muss, kann es durch in-place-Methoden wie push() modifiziert werden. Die CSSStyleSheet-Instanzen selbst können ebenfalls geändert werden, und diese Änderungen gelten überall dort, wo das Stylesheet übernommen wurde.

In einer früheren Version der Spezifikation war das Array nicht modifizierbar, sodass neue Stylesheets nur hinzugefügt werden konnten, indem ein neues Array zu adoptedStyleSheets zugewiesen wurde.

Ausnahmen

NotAllowedError DOMException

Eine der CSSStyleSheet-Instanzen im Array wurde nicht mit dem CSSStyleSheet() constructor erstellt oder wurde in einem anderen Dokument als dem aktuellen Dokument erstellt, z. B. in einem Frame.

Beispiele

Ein Stylesheet übernehmen

Der Code unten zeigt, wie ein Stylesheet konstruiert wird, und anschließend wird CSSStyleSheet.replaceSync() aufgerufen, um eine Regel hinzuzufügen. Das Stylesheet wird dann einem Array hinzugefügt und der adoptedStyleSheets-Eigenschaft zugewiesen.

js
// Create an empty "constructed" stylesheet
const sheet = new CSSStyleSheet();
// Apply a rule to the sheet
sheet.replaceSync("a { color: red; }");

// Apply the stylesheet to a document
document.adoptedStyleSheets = [sheet];

Wir können eine neue Regel zum Stylesheet mit CSSStyleSheet.insertRule() hinzufügen.

js
sheet.insertRule("* { background-color: blue; }");
// The document will now have blue background.

Ein neues Stylesheet hinzufügen

Um ein vollständiges neues Stylesheet zur adoptedStyleSheets-Eigenschaft hinzuzufügen, müssen wir ein neues kombiniertes Array erstellen und zuweisen. Dies wird unten mit Spread-Syntax demonstriert:

js
const extraSheet = new CSSStyleSheet();
extraSheet.replaceSync("p { color: green; }");

// Combine the existing sheets and new one
document.adoptedStyleSheets = [...document.adoptedStyleSheets, extraSheet];

Ein Stylesheet mit einem Shadow-DOM teilen

Wir können ein Stylesheet auf ähnliche Weise einem Shadow-Root zuweisen.

js
// Create an element in the document and then create a shadow root:
const node = document.createElement("div");
const shadow = node.attachShadow({ mode: "open" });

//Adopt the same sheet into the shadow DOM
shadow.adoptedStyleSheets = [sheet];

Spezifikationen

Specification
CSS Object Model (CSSOM)
# dom-documentorshadowroot-adoptedstylesheets

Browser-Kompatibilität

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
adoptedStyleSheets

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

Siehe auch