Estou experimentando elementos personalizados do Vanilla e não parece possível inserir uma tag de estilo:
class MyElement extends HTMLElement {
constructor() {
super();
this.attachShadow({mode: "open"});
}
connectedCallback() {
this.shadowRoot.append(document.getElementById('my-element-template').content.cloneNode(true));
}
}
window.customElements.define("my-element", MyElement);
<template id="my-element-template">
<slot name="my-style">
<style>
p { color: red; }
</style>
</slot>
<p>Why am I still red instead of green?</p>
</template>
<my-element>
<style slot="my-style">
p { color: green; }
</style>
</my-element>
Atualização - Mover elementos de estilo para ShadowDOM
A solução original funcionou, mas os comentaristas sugeriram melhorias. Os elementos de estilo dentro de um slot se comportam de forma diferente de outros elementos de tipos. Eles aparecem no DOM em vez do ShadowDOM do componente. É por isso que o código do OP não funcionou como esperado. A solução original corrigiu isso usando shadowRoot.adoptedStyleSheets , mas essas etapas eram desnecessárias. A solução mais simples é mover os elementos de estilo diretamente para o ShadowDOM.
É importante ressaltar que isso se aplica somente aos estilos adicionados aos slots e não aos estilos na definição do componente.
Solução original - funciona, mas é prolixo