Spec-Zone.ru › Web APIs

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

Спецификации

Спецификация
CSS Объектная модель (CSSOM)
# dom-documentorshadowroot-adoptedstylesheets

Совместимость браузеров

Рабочие столы Мобильные устройства
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

См. также

  • Конструктируемые таблицы стилей (web.dev)
  • Использование Shadow DOM
  • CSSStyleSheet() конструктор
  • CSSStyleSheet.replaceSync()
  • CSSStyleSheet.replace()
  • CSSStyleSheet.insertRule()
  • CSSStyleSheet.deleteRule()

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API