Переопределение стилей в элементе shadow-root

есть ли способ изменить стили, найденные в элементе shadow? В частности, расширить / перезаписать некоторые свойства, найденные в css класс? Я использую расширение chrome под названием Beanote который не обновлялся с апреля (2017), и есть досадная ошибка, которую я хотел бы исправить. Я обнаружил, что одна строка css исправляет его достаточно для меня, но я в недоумении при применении его, не заходя внутрь самого элемента shadow и непосредственно редактируя эти стили в инструментах разработки.

Я ищу способ для этого:

/*global css rule*/
.the-class-name { property-name: my-value; }

переписать следующим образом:

/* style tag inside the shadow-root */
.the-class-name { property-name: bad-value; }


Большинство ресурсов, которые я нашел в интернете с запросами с участием shadow-root override style или edit shadow-root styling имеет какое-то отношение к :host который, если он предназначен для этого, не работает для моих нужд или устаревших функций, таких как ::shadow.

1 ответов


из-за изоляции стилей, которая является особенностью Shadow DOM, вы не можете определить глобальное правило CSS, которое будет применяться в области Shadow DOM.

это может быть возможно с переменными CSS, но они должны быть реализованы явно в затененном компоненте (что не относится к этой сторонней библиотеке).

обходной путь заключается в том, чтобы напрямую ввести линию стиля в shadow DOM.

//host is the element that holds the shadow root:
var style = document.createElement( 'style' )
style.innerHTML = '.the-class-name { property-name: my-value; }'
host.shadowRoot.appendChild( style )

NB: он будет работать, только если тень DOM mode установлено значение 'open'.