# Стили и селекторы Стилизация Shadow DOM покрывается более общей спецификацией ["CSS Scoping"](http://drafts.csswg.org/css-scoping/). По умолчанию стили внутри Shadow DOM относятся только к его содержимому. [cut] Например: ```html

Жили мы тихо-мирно, и тут...

Доброе утро, страна!

``` При запуске окрашенным в красный цвет окажется только `

` внутри Shadow DOM. Обратим внимание, окрасился именно тот элемент, который находится непосредственно в Shadow DOM. А элементы, которые отображены в Shadow DOM при помощи ``, этот стиль не получили -- у них есть свои, заданные на внешней странице. ## Внешний стиль для Shadow DOM Граница между Shadow DOM и основным DOM, хоть и существует, но при помощи специальных селекторов её можно переходить. Если нужно с основной страницы стилизовать или выбрать элементы внутри Shadow DOM, то можно использовать селекторы:

[warn header="Нельзя получить содержимое встроенных элементов"] Описанные CSS-селекторы можно использовать не только в CSS, но и в `querySelector`. Исключением являются встроенные элементы типа ``, для которых CSS-селекторы работают, но получить их содержимое нельзя. Например: ```html

``` [/warn] ## Стиль в зависимости от хозяина Следующие селекторы позволяют изнутри Shadow DOM выбрать внешний элемент ("элемент-хозяин"): Пример использования селектора `:host()` для разной расцветки Shadow DOM-сообщения, в зависимости от того, в каком оно `

`: ```html *!*

Доброе утро, страна!

*/!* *!*

Внимание-внимание! Говорит информбюро!

*/!* ``` ## Стиль для content Тег `` не меняет DOM, а указывает, что где показывать. Поэтому если элемент изначально находится в элементе-хозяине -- внешний документ сохраняет к нему доступ. К нему будут применены стили и сработают селекторы, всё как обычно. Например, здесь применится стиль для ``: ```html

Доброе утро, страна!

``` В примере выше заголовок "Доброе утро, страна!", который пришёл как `` из внешнего документа, будет подчёркнут, Итак, стили основного DOM-дерева применяются, всё в порядке. Но что, если Shadow DOM тоже "имеет виды" на `` и хочет стилизовать вставленное? Это тоже возможно. **Для обращения к "содержимому" `` из стилей внутри Shadow DOM используется псевдоэлемент `::content`.** Например, изнутри Shadow DOM селектор `content[select="h1"]::content span` найдёт элемент `` и *в его содержимом* отыщет ``. В примере ниже селектор `::content span` стилизует все `` внутри всех ``: ```html

Доброе утро, страна!

``` Текст внутри `

` -- зелёный и подчёркнутый одновременно, но стилизуется именно тот ``, который показан в ``, а тот, который просто в Shadow DOM -- нет. Приоритет селекторов расчитывается по [обычным правилам специфичности](http://www.w3.org/TR/css3-selectors/#specificity), если же приоритеты стилей на странице и в Shadow DOM и на странице равны, то, как описано в секции [Cascading](http://dev.w3.org/csswg/css-scoping/#cascading), побеждает страница, а для `!important`-стиля побеждает Shadow DOM. ## Итого По умолчанию стили и селекторы из DOM-дерева действуют только на те элементы, в которых сами находятся. Границу можно преодолевать, причём проще, естественно, от родителя к Shadow DOM, чем наоборот:
  • Снаружи можно выбирать и стилизовать элементы внутри Shadow DOM -- при помощи селекторов `::shadow` и `>>>`.
  • Изнутри Shadow DOM можно стилизовать не только то, что изначально в Shadow DOM, но и узлы, показываемые в ``.
  • Также можно ставить стиль в зависимость от хозяиня при помощи селекторов `::host`, `::host-context`, но выбирать и стилизовать произвольные теги внутри хозяина нельзя.