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

View in English Always switch to English

:has() CSS-Pseudoklasse

Baseline
Weitgehend verfügbar

Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Dezember 2023 browserübergreifend verfügbar.

Die funktionale :has() CSS Pseudoklasse repräsentiert ein Element, wenn einer der als Argument übergebenen relativen Selektoren mindestens ein Element trifft, wenn er gegen dieses Element verankert ist. Diese Pseudoklasse bietet eine Möglichkeit, ein Elternelement oder ein früheres Geschwisterelement in Bezug auf ein Referenzelement auszuwählen, indem es eine relative Selektorliste als Argument verwendet.

css
/* Selects an h1 heading with a
paragraph element that immediately follows
the h1 and applies the style to h1 */
h1:has(+ p) {
  margin-bottom: 0;
}

Die :has() Pseudoklasse übernimmt die Spezifität des spezifischsten Selektors in ihren Argumenten auf die gleiche Weise wie :is() und :not().

Syntax

css
:has(<relative-selector-list>) {
  /* ... */
}

Wenn die :has() Pseudoklasse selbst in einem Browser nicht unterstützt wird, schlägt der gesamte Selektorblock fehl, es sei denn, :has() befindet sich in einer nachsichtigen Selektorliste, wie in :is() und :where().

Die :has() Pseudoklasse kann nicht innerhalb einer anderen :has() verschachtelt werden.

Pseudoelemente sind auch keine gültigen Selektoren innerhalb von :has() und Pseudoelemente sind keine gültigen Anker für :has(). Dies liegt daran, dass viele Pseudoelemente bedingt basierend auf dem Styling ihrer Vorfahren existieren und es zu zyklischen Abfragen führen kann, wenn diese durch :has() abgefragt würden.

Beispiele

Auswahl eines Elternelements

Sie suchen möglicherweise nach einem "Eltern-Kombinator", der es Ihnen ermöglicht, den DOM-Baum aufwärts zu gehen und das Elternelement eines bestimmten Elements auszuwählen. Die :has() Pseudoklasse erledigt dies, indem sie parent:has(child) (für jedes Elternelement) oder parent:has(> child) (für direktes Elternelement) verwendet. Dieses Beispiel zeigt, wie ein <section> Element gestaltet wird, wenn es ein Kind mit der Klasse featured enthält.

html
<section>
  <article class="featured">Featured content</article>
  <article>Regular content</article>
</section>
<section>
  <article>Regular content</article>
</section>
css
section:has(.featured) {
  border: 2px solid blue;
}

Ergebnis