Spec-Zone.ru › Web APIs

Документ: свойство adoptedStyleSheets

Базовая версия 2023
Новое

С марта 2023 года эта функция работает на последних версиях устройств и браузеров. Возможно, эта функция не будет работать на старых устройствах или браузерах.

  • Подробнее
  • Полная совместимость
  • Отправить отзыв

Свойство adoptedStyleSheets интерфейса Document используется для задания массива созданных таблиц стилей, которые должны использоваться документом.

Примечание: Созданная таблица стилей — это таблица стилей, созданная программно с помощью CSSStyleSheet() конструктора (в отличие от таблицы стилей, созданной агентом пользователя при импорте таблицы стилей из скрипта, импортированной с помощью <style> и @import, или связанной через <link>).

Те же созданные таблицы стилей также могут быть разделены с одним или несколькими экземплярами ShadowRoot с помощью свойства ShadowRoot.adoptedStyleSheets. Изменение принятой таблицы стилей повлияет на все объекты, которые её используют.

Таблицы стилей в свойстве оцениваются вместе с другими таблицами стилей документа с использованием алгоритма каскадирования CSS. В местах, где разрешение правил учитывает порядок таблиц стилей, adoptedStyleSheets предполагается упорядочить после тех, что в Document.styleSheets.

Только таблицы стилей, созданные с помощью CSSStyleSheet() конструктора в контексте текущего Document, могут быть приняты.

Значение

Значение — массив экземпляров CSSStyleSheet, которые должны быть созданы с помощью CSSStyleSheet() конструктора в контексте того же Document.

Если массив необходимо изменить, используйте локальные мутации, например, push(). Сами экземпляры CSSStyleSheet также могут быть изменены, и эти изменения применятся везде, где таблица стилей принята.

В более ранней версии спецификации массив не был изменяемым, поэтому единственный способ добавить новые таблицы стилей заключался в присвоении нового массива свойству adoptedStyleSheets.

Исключения

NotAllowedError DOMException

Один из экземпляров CSSStyleSheet в массиве не был создан с помощью CSSStyleSheet() конструктора или был создан в другом документе, например, в фрейме.

Примеры

Принятие таблицы стилей

Код ниже демонстрирует построение таблицы стилей, а затем вызов CSSStyleSheet.replaceSync() для добавления правила в таблицу. Затем таблица стилей добавляется в массив и присваивается свойству adoptedStyleSheets.

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

Мы можем добавить новое правило к таблице стилей с помощью CSSStyleSheet.insertRule().

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

Добавление новой таблицы стилей

Чтобы добавить новую таблицу стилей к свойству adoptedStyleSheets, нужно создать и присвоить новый объединённый массив. Это показано ниже с использованием синтаксиса spread:

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

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

Разделяемая таблица стилей с Shadow DOM

Мы можем аналогичным образом разделить таблицу стилей с корнем тени.

// 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

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

Рабочий стол Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для 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/Document/adoptedStyleSheets

Spec-Zone.ru

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