:host()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.
Die :host()
-Funktion der CSS-Pseudoklasse wählt den Shadow-Host des Shadow DOM aus, der das CSS enthält, in dem sie verwendet wird (so können Sie ein benutzerdefiniertes Element aus seinem Shadow DOM heraus auswählen) - allerdings nur, wenn der als Parameter der Funktion angegebene Selektor mit dem Shadow-Host übereinstimmt. :host()
hat keine Wirkung, wenn es außerhalb eines Shadow DOMs verwendet wird.
Der offensichtlichste Anwendungsfall dafür ist, einen Klassennamen nur auf bestimmte Instanzen eines benutzerdefinierten Elements zu setzen und dann den relevanten Klassenselektor als Funktionsargument einzuschließen. Sie können dies nicht mit einem Nachfahren-Selektorausdruck verwenden, um nur Instanzen des benutzerdefinierten Elements auszuwählen, die sich in einem bestimmten Vorfahren befinden. Das ist die Aufgabe von :host-context()
.
Hinweis:
Während andere funktionale Pseudoklassen wie :is()
und :not()
eine Liste von Selektoren als Parameter akzeptieren, nimmt :host()
einen einzigen zusammengesetzten Selektor als Parameter. Darüber hinaus berücksichtigen :is()
und :not()
nur die Spezifität ihres Arguments, während die Spezifität von :host()
sowohl die Spezifität der Pseudoklasse als auch die Spezifität ihres Arguments ist.
Probieren Sie es aus
/* Selects a shadow root host, only if it is
matched by the selector argument */
:host(.special-custom-element) {
font-weight: bold;
}
Syntax
:host(<compound-selector>) {
/* ... */
}
Beispiele
Selektives Styling von Shadow-Hosts
Die folgenden Code-Snippets stammen aus unserem host-selectors Beispiel (siehe es auch live).
In diesem Beispiel haben wir ein benutzerdefiniertes Element — <context-span>
— das Sie um Text herumlegen können:
<h1>
Host selectors <a href="#"><context-span>example</context-span></a>
</h1>
Innerhalb des Konstruktors des Elements erstellen wir style
- und span
-Elemente, füllen das span
mit dem Inhalt des benutzerdefinierten Elements und das style
-Element mit einigen CSS-Regeln:
const style = document.createElement("style");
const span = document.createElement("span");
span.textContent = this.textContent;
const shadowRoot = this.attachShadow({ mode: "open" });
shadowRoot.appendChild(style);
shadowRoot.appendChild(span);
style.textContent =
"span:hover { text-decoration: underline; }" +
":host-context(h1) { font-style: italic; }" +
':host-context(h1):after { content: " - no links in headers!" }' +
":host-context(article, aside) { color: gray; }" +
":host(.footer) { color : red; }" +
":host { background: rgb(0 0 0 / 10%); padding: 2px 5px; }";
Die Regel :host(.footer) { color : red; }
stylt alle Instanzen des <context-span>
-Elements (den Shadow-Host in diesem Fall) im Dokument, die die Klasse footer
gesetzt haben — wir haben sie verwendet, um Instanzen des Elements innerhalb des <footer>
eine besondere Farbe zu geben.
Spezifikationen
Specification |
---|
CSS Scoping Module Level 1 # host-selector |
Browser-Kompatibilität
BCD tables only load in the browser