Это неправильное представление в слотах содержимое MOVED до слотов в shadowDOM
Это НЕ! ;
Он остается невидимым в lightDOM и ОТРАЖЕН в свой СЛОТ в shadowDOM
Это означает, что вы можете применять стили после того, как содержимое было выделено (при наведении курсора в приведенном ниже коде)
Или .. для стилизации именованных слотов, вы стилизуете содержимое без имени в lightDOM:
customElements.define("my-element", class extends HTMLElement {
connectedCallback() {
let template = document.getElementById(this.nodeName);
this.attachShadow({
mode: 'open'
}).appendChild(template.content.cloneNode(true));
}
})
my-element div {
background: lightcoral;
padding: 1em;
margin-top:.5em;
}
my-element div:hover {
background: lightgreen;
}
h1{
background:lightblue;
color:black;
margin:0;
}
h1:hover {
color: red;
}
<template id=MY-ELEMENT>
<style>
:host {
display: block;
padding:.5em;
background:green;
}
::slotted(*){
color:white;
}
div{
border:1px dashed black;
}
</style>
<div>
<slot name=title></slot>
<slot></slot>
</div>
</template>
<my-element>
<div>Custom Elements Rule!</div>
<h1 slot=title>Hello World!</h1>
<div>What a wonderfull day!</div>
</my-element>
Замечание! как весь безымянный контент переходит в (один) безымянный слот