С ShadyCSS
:host
Псевдоэлемент CSS не известен в Edge.
Чтобы заставить его работать, вы должны использовать ShadyCSS.prepareTemplate()
, который заменит: host по имени пользовательского элемента и определите стиль как глобальный стиль, который будет применяться ко всей странице.
Помните, что в Edge нет Shadow DOM: нет границ / областей действия для CSS с поддельным / заполненным Shadow DOM.
В вашем случае вы можете использовать ShadyCSS.prepareTemplate( yourTemplate, 'div' )
, как в примере ниже:
ShadyCSS.prepareTemplate( tpl, 'div' )
container.attachShadow( { mode: "open" } )
.appendChild( tpl.content.cloneNode(true) )
<script src="https://cdnjs.cloudflare.com/ajax/libs/webcomponentsjs/2.3.0/webcomponents-bundle.js"></script>
<template id=tpl>
<style>
:host .stuff {
background: #ff00ff;
}
</style>
<div class=stuff>stuff inside shadow dom</div>
</template>
<div id=container>container is here</div>
Примечание: , поскольку полифильм заменит: host на div и добавит его в качестве глобального стиля, вы можете наблюдать некоторые побочные эффекты, еслиу вас есть другая часть кода HTML, которая соответствует div .stuff
.
без ShadyCSS
ShadyCSS была разработана для пользовательских элементов, но не совсем для стандартных элементов. Тем не менее, вы должны черпать вдохновение из полифилла и явно создавать свойства стилей для искусственного (полизаполненного) Shadow DOM. В вашем случае замените :host
на div#containter
:
container.attachShadow( { mode: "open" } )
.appendChild( tpl.content.cloneNode(true) )
<script src="https://cdnjs.cloudflare.com/ajax/libs/webcomponentsjs/2.3.0/webcomponents-bundle.js"></script>
<template id=tpl>
<style>
div#container .stuff {
background: #ff00ff;
}
:host .stuff {
background: #ff00ff;
}
</style>
<div class=stuff>stuff inside shadow dom</div>
</template>
<div id=container>container is here</div>