这是一个误解,插槽内容被移动到shadowDOM中的插槽
不是!;
它在 lightDOM 中保持不可见,并在shadowDOM中反映到它的 SLOT
这意味着您可以在内容被插入后应用样式(鼠标悬停在下面的代码中)
或者.. 要设置未命名插槽的样式,您可以在 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>
笔记!所有未命名的内容如何进入(一个)未命名的SLOT