ShadowRoot: свойство adoptedStyleSheets
Базовая версия 2023
Новое свойство
С марта 2023 года эта функция работает на последних устройствах и версиях браузеров. Возможно, эта функция не будет работать на более старых устройствах или браузерах.
Свойство adoptedStyleSheets интерфейса ShadowRoot задаёт массив созданных таблиц стилей, которые будут использоваться поддеревом тени.
Примечание: Созданная таблица стилей — это таблица стилей, созданная программно с помощью конструктора CSSStyleSheet() (в отличие от таблицы, созданной пользовательским агентом при импорте таблицы стилей из скрипта, импортированной с помощью <style> и @import, или связанной с помощью <link>).
Одна и та же созданная таблица стилей может быть принята несколькими экземплярами ShadowRoot и родительским документом (с помощью свойства Document.adoptedStyleSheets). Изменение принятой таблицы стилей повлияет на все объекты, её принявшие.
Таблицы стилей в свойстве adoptedStyleSheets учитываются вместе с другими таблицами стилей тени. Для определения окончательных вычисленных CSS любого элемента они рассматриваются как добавленные после других таблиц стилей в тени (ShadowRoot.styleSheets).
Только таблицы стилей, созданные с помощью конструктора CSSStyleSheet() и в пределах родительского Document тени, могут быть приняты.
Значение
Значение — это массив экземпляров CSSStyleSheet, которые должны быть созданы с помощью конструктора CSSStyleSheet() в контексте родительского Document тени.
Если массив нужно изменить, используйте внутри-локальные изменения, такие как push(). Экземпляры CSSStyleSheet также могут быть изменены, и эти изменения будут применяться везде, где таблица стилей принята.
В более ранней версии спецификации массив не был изменяемым, поэтому единственный способ добавить новые таблицы стилей заключался в присвоении нового массива свойству adoptedStyleSheets.
Примеры
Принятие таблицы стилей
Код ниже сначала показывает, как создаётся таблица стилей, а затем вызывается CSSStyleSheet.replaceSync() для добавления правила в таблицу.
// Create an empty "constructed" stylesheet
const sheet = new CSSStyleSheet();
// Apply a rule to the sheet
sheet.replaceSync("a { color: red; }");
Затем мы создаём ShadowRoot и передаём объект таблицы в adoptedStyleSheets в массиве.
// 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 sheet into the shadow DOM
shadow.adoptedStyleSheets = [sheet];
Мы всё ещё можем изменять таблицы стилей после их добавления в массив. Ниже мы добавляем новое правило в ту же таблицу с помощью CSSStyleSheet.insertRule().
sheet.insertRule("* { background-color: blue; }");
// The document will now have blue background.
Добавление новой таблицы стилей
Новые таблицы стилей могут быть добавлены в документ или корень тени с помощью adoptedStyleSheets.push():
const extraSheet = new CSSStyleSheet();
extraSheet.replaceSync("p { color: green; }");
// Concat the new sheet.
shadow.adoptedStyleSheets.push(extraSheet);
Спецификации
Совместимость браузеров
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
adoptedStyleSheets |
73 | 79 | 101 | 60 | 16.4 | 73 | 101 | 50 | 16.4 | 11.0 | 73 |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/ShadowRoot/adoptedStyleSheets