文件:adoptedStyleSheets 屬性

Baseline 已廣泛支援

此功能已成熟,並可在許多裝置和瀏覽器版本上執行。自 2023 年 3 月以來,它已在各種瀏覽器中可用。

Document 介面的 adoptedStyleSheets 屬性用於設定一個由構造樣式表組成的陣列,供文件使用。

注意: 構造樣式表是使用 CSSStyleSheet() 建構函式以程式設計方式建立的樣式表(與使用者代理在從指令碼匯入樣式表、使用 <style>@import 匯入或透過 <link> 連結時建立的樣式表不同)。

相同的構造樣式表也可以使用 ShadowRoot.adoptedStyleSheets 屬性與一個或多個 ShadowRoot 例項共享。更改已採用的樣式表將影響所有采用它的物件。

屬性中的樣式表與文件的其他樣式表一起使用 CSS 層疊演算法進行評估。在規則解析考慮樣式表順序時,adoptedStyleSheets 被假定在 Document.styleSheets 中的樣式表之後。

只有在當前 Document 的上下文中使用 CSSStyleSheet() 建構函式建立的樣式表才能被採用。

該值是一個 CSSStyleSheet 例項陣列,這些例項必須在同一個 Document 的上下文中,使用 CSSStyleSheet() 建構函式建立。

如果需要修改陣列,請使用 push() 等就地修改。CSSStyleSheet 例項本身也可以被修改,這些更改將應用於採用該樣式表的所有地方。

在規範的早期版本中,該陣列不可修改,因此新增新樣式表的唯一方法是為 adoptedStyleSheets 分配一個新陣列。

異常

NotAllowedError DOMException

陣列中的某個 CSSStyleSheet 例項不是使用 CSSStyleSheet() 建構函式建立的,或者是在與當前文件不同的文件中構造的,例如在框架中的文件。

示例

採用樣式表

下面的程式碼展示了一個樣式表被構造,然後呼叫 CSSStyleSheet.replaceSync() 來向樣式表新增一個規則。然後將樣式表新增到一個數組並賦值給 adoptedStyleSheets 屬性。

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.push(sheet);

我們可以使用 CSSStyleSheet.insertRule() 向樣式表新增新規則。

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

與 Shadow DOM 共享樣式表

我們可以以類似的方式將樣式表共享給 Shadow Root。

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];

規範

規範
CSS 物件模型 (CSSOM)
# dom-documentorshadowroot-adoptedstylesheets

瀏覽器相容性

另見