Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

:state()

Baseline 2024
Newly available

Since ⁨May 2024⁩, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.

Die :state() CSS Pseudoklasse entspricht benutzerdefinierten Elementen, die den angegebenen benutzerdefinierten Zustand haben.

Syntax

css
:state(<custom identifier>) {
  /* ... */
}

Parameter

Die :state()-Pseudoklasse nimmt als Argument einen benutzerdefinierten Bezeichner an, der den Zustand des benutzerdefinierten Elements darstellt, das übereinstimmen soll.

Beschreibung

Elemente können aufgrund von Benutzerinteraktion und anderen Faktoren zwischen Zuständen wechseln. Zum Beispiel kann sich ein Element im "hover"-Zustand befinden, wenn ein Benutzer darüber schwebt, oder ein Link kann sich im "visited"-Zustand befinden, nachdem ein Benutzer darauf geklickt hat. Von Browsern bereitgestellte Elemente können basierend auf diesen Zuständen mithilfe von CSS-Pseudoklassen wie :hover und :visited gestaltet werden. In ähnlicher Weise können autonome benutzerdefinierte Elemente (benutzerdefinierte Elemente, die nicht von eingebauten Elementen abgeleitet sind) ihre Zustände offenlegen, wodurch Seiten, die die Elemente verwenden, sie mithilfe der CSS-:state()-Pseudoklasse gestalten können.

Die Zustände eines benutzerdefinierten Elements werden durch Zeichenfolgenwerte dargestellt. Diese Werte werden zu einem CustomStateSet-Objekt hinzugefügt oder daraus entfernt, das dem Element zugeordnet ist. Die CSS-:state()-Pseudoklasse stimmt mit einem Element überein, wenn der als Argument übergebene Bezeichner im CustomStateSet des Elements vorhanden ist.

Die :state()-Pseudoklasse kann auch verwendet werden, um benutzerdefinierte Zustände innerhalb der Implementierung eines benutzerdefinierten Elements zu erfassen. Dies wird erreicht, indem :state() innerhalb der :host()-Pseudoklasse verwendet wird, die einen Zustand nur innerhalb des Shadow-DOMs des aktuellen benutzerdefinierten Elements erfasst.

Darüber hinaus ermöglicht das ::part()-Pseudoelement, gefolgt von der :state()-Pseudoklasse, das Erfassen von Shadow-Teilen eines benutzerdefinierten Elements, die sich in einem bestimmten Zustand befinden. (Shadow-Teile sind Teile des Shadow-Baums eines benutzerdefinierten Elements, die explizit einer enthaltenen Seite zur Gestaltung zugänglich gemacht werden.)

Beispiele

Übereinstimmung eines benutzerdefinierten Zustands

Dieses CSS zeigt, wie die Umrandung des autonomen benutzerdefinierten Elements <labeled-checkbox> geändert wird, um rot zu sein, wenn es sich im "checked"-Zustand befindet.

css
labeled-checkbox {
  border: dashed red;
}
labeled-checkbox:state(checked) {
  border: solid;
}

Für ein Live-Beispiel dieses Codes in Aktion sehen Sie das Beispiel Übereinstimmung des benutzerdefinierten Zustands eines benutzerdefinierten Checkbox-Elements auf der Seite CustomStateSet.

Übereinstimmung eines benutzerdefinierten Zustands im Shadow-DOM eines benutzerdefinierten Elements

Dieses Beispiel zeigt, wie die :state()-Pseudoklasse innerhalb der :host()-Pseudoklasse verwendet werden kann, um benutzerdefinierte Zustände innerhalb der Implementierung eines benutzerdefinierten Elements abzugleichen.

Das folgende CSS fügt ein graues [x] vor dem Element ein, wenn es sich im "checked"-Zustand befindet.

css
:host(:state(checked))::before {
  content: "[x]";
}

Für ein Live-Beispiel dieses Codes in Aktion sehen Sie das Beispiel Übereinstimmung des benutzerdefinierten Zustands eines benutzerdefinierten Checkbox-Elements auf der Seite CustomStateSet.

Übereinstimmung eines benutzerdefinierten Zustands in einem Shadow-Teil

Dieses Beispiel zeigt, wie die :state()-Pseudoklasse verwendet werden kann, um gezielt die Shadow-Teile eines benutzerdefinierten Elements anzusprechen.

Shadow-Teile werden über das part-Attribut definiert und benannt. Betrachten Sie zum Beispiel ein benutzerdefiniertes Element namens <question-box>, das ein benutzerdefiniertes <labeled-checkbox>-Element als einen Shadow-Teil namens checkbox verwendet:

js
shadowRoot.innerHTML = `<labeled-checkbox part='checkbox'>Yes</labeled-checkbox>`;

Das folgende CSS zeigt, wie das ::part()-Pseudoelement verwendet werden kann, um gegen den 'checkbox'-Shadow-Teil abzugleichen. Es zeigt dann, wie das ::part()-Pseudoelement, gefolgt von der :state()-Pseudoklasse, verwendet werden kann, um gegen dasselbe Teil abzugleichen, wenn es sich im checked-Zustand befindet.

css
question-box::part(checkbox) {
  color: red;
}

question-box::part(checkbox):state(checked) {
  color: green;
  outline: dashed 1px green;
}

Für ein Live-Beispiel dieses Codes in Aktion sehen Sie das Beispiel Übereinstimmung eines benutzerdefinierten Zustands in einem Shadow-Teil eines benutzerdefinierten Elements auf der Seite CustomStateSet.

Spezifikationen

Specification
HTML
# selector-custom

Browser-Kompatibilität

Siehe auch