Ich habe ein benutzerdefiniertes Element (ohne Shadow-DOM), das ich überall verwenden könnte, auch innerhalb eines anderen benutzerdefinierten Elements, das möglicherweise Shadow-DOM verwendet . Ich bin mir jedoch nicht sicher, wie ich die Stile an beiden Orten zum Laufen bringen kann.Verwenden eines benutzerdefinierten Shadow-DOM-Elements innerhalb und außerhalb des Schattens DOM
Zum Beispiel können sagen, dass ich ein einfaches fancy-button
Element erstellen:
class fancyButton extends HTMLElement {
constructor() {
super();
this.innerHTML = `
<style>
fancy-button button {
padding: 10px 15px;
background: rgb(62,118,194);
color: white;
border: none;
border-radius: 4px
}
</style>
<button>Click Me</button>`;
}
}
customElements.define('fancy-button', fancyButton);
<fancy-button></fancy-button>
Innerhalb eines Schatten DOM-Element, das eingesetzt Style-Tag ermöglicht die fancy-button
Arten zu arbeiten. Wenn diese Komponente jedoch außerhalb eines Schatten-DOM-Elements verwendet wird, wird das Stil-Tag bei jeder Verwendung des Elements dupliziert.
Wenn ich stattdessen das style-Tag als Teil der HTML-Importdatei hinzufüge, funktionieren die Stile nur außerhalb des Schatten-DOM, aber sie werden nur einmal deklariert.
<!-- fancy-button.html -->
<style>
fancy-button button {
padding: 10px 15px;
background: rgb(62,118,194);
color: white;
border: none;
border-radius: 4px
}
</style>
<script>
class fancyButton extends HTMLElement {
constructor() {
super();
this.innerHTML = `<button>Click Me</button>`;
}
}
customElements.define('fancy-button', fancyButton);
</script>
Wie fügen Sie am besten benutzerdefinierte Elementstile hinzu, die sowohl innerhalb als auch außerhalb des Schatten-DOM verwendet werden können?
Der beste Weg ist die erste Lösung, weil sie die einzige ist, die funktioniert. Eine andere Möglichkeit besteht darin, zu testen, ob Sie sich in einem Shadow-DOM befinden und den Stil bei Bedarf hinzufügen. – Supersharp