0Pricing
CSS Academy · Lektion

:has()-Relationspseudo-Klasse

Wählen Sie über die leistungsfähige Relationspseudo-Klasse :has() Elternelemente anhand ihrer untergeordneten Elemente aus.

:has()-Relationspseudo-Klasse ist eine kostenlose CSS Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des CSS Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der CSS Academy-Kurs umfasst insgesamt 4 Lektionen.

Was ist :has()?

Die Pseudo-Klasse :has() wählt ein Element aus, wenn es einen Nachfahren enthält, der dem Argument entspricht. Sie wird oft als „Elternselektor“ bezeichnet und ermöglicht es, ein Elternelement anhand seiner untergeordneten Elemente zu formatieren – eine Fähigkeit, die CSS zuvor nicht hatte.

Grundlegende Syntax

.card:has(img) wählt jedes .card-Element aus, das einen img-Nachfahren enthält. Das Argument ist eine Liste relativer Selektoren – jeder gültige CSS-Selektor, der Elemente relativ zum Zielelement beschreibt.

Elternelemente formatieren

Formatieren Sie einen Formular-Container, wenn er ein ungültiges Eingabefeld enthält: form:has(:invalid) { border-color: red; }. Formatieren Sie einen Abschnitt, der eine Überschrift enthält: section:has(h2) { padding-top: 2rem; }. Das Elternelement ändert sein Erscheinungsbild abhängig vom Zustand der untergeordneten Elemente.

Geschwisterauswahl

:has() kann vorhergehende Geschwister auswählen – etwas, das + und ~ nicht können. h2:has(+ p) wählt h2-Elemente aus, auf die unmittelbar ein p-Element folgt. li:has(~ .active) wählt li-Elemente aus, die ein nachfolgendes .active-Geschwisterelement haben.

Formatierung des Formularzustands

Reagieren Sie ohne JavaScript auf die native Gültigkeit von Formularen: input:has(~ .error-msg) formatiert ein Eingabefeld mit einer Geschwister-Fehlermeldung. label:has(+ input:required) formatiert Beschriftungen, deren zugehöriges Eingabefeld erforderlich ist – alles allein mit CSS.

Navigationszustand

Heben Sie Navigationscontainer anhand eines aktiven untergeordneten Elements hervor: nav:has(.active) wendet Stile auf die gesamte Navigation an, wenn ein beliebiges untergeordnetes Element die Klasse active besitzt. Das ist nützlich, um auf Containerebene den aktuell ausgewählten Navigationsbereich anzuzeigen.

Kombination mit anderen Pseudo-Klassen

.grid:has(.card:focus-within) formatiert das gesamte Grid, wenn eine beliebige Karte den Tastaturfokus erhält. .dropdown:has(:hover) hält ein Dropdown geöffnet, solange der Mauszeiger über einem beliebigen Nachfahren liegt – klarer als komplexe Ketten von Geschwisterkombinatoren.

Entsprechung zu Media Queries in CSS

.sidebar:has(nav) wendet ein anderes Layout an als .sidebar:not(:has(nav)). Bedingte Layouts ohne JavaScript: Das Vorhandensein oder Fehlen bestimmter untergeordneter Elemente steuert das Layout des Elternelements und ermöglicht wirklich adaptive, inhaltsbewusste CSS-Layouts.

Überlegungen zur Performance

:has() mit breit gefassten Argumentselektoren (z. B. :has(*)) kann aufwendig sein – der Browser muss jedes Element prüfen. Halten Sie die Argumente von :has() spezifisch. Bevorzugen Sie nach Möglichkeit :has(> .specific-child) (direktes untergeordnetes Element) gegenüber :has(.specific-child) (beliebiger Nachfahre).

Browserunterstützung

:has() wird von Chrome 105+, Safari 15.4+ und Firefox 121+ unterstützt. Seit Ende 2023 besteht vollständige Baseline-Unterstützung. Es gibt kein Polyfill (dafür wäre JavaScript zur Simulation erforderlich) – verwenden Sie die Funktion bei älteren Browsern mit Progressive Enhancement, wenn sie nicht kritisch ist.

JavaScript-Muster ersetzen

Muster, die zuvor JS-Event-Listener erforderten: „Klasse zum Elternelement hinzufügen, wenn ein untergeordnetes Element fokussiert ist“, „Overlay anzeigen, wenn ein Modal-Trigger vorhanden ist“, „ein Grid anders formatieren, wenn es genau drei Elemente enthält“. :has() erledigt all diese Aufgaben deklarativ.

Wissenscheck

Was macht :has() im Vergleich zu vorhandenen CSS-Kombinatoren wie + und ~ einzigartig?

Zusammenfassung

:has() ist die erste echte relationale Pseudo-Klasse von CSS und ermöglicht die Auswahl von Elternelementen und vorhergehenden Geschwisterelementen. Sie ermöglicht inhaltsgesteuerte Formatierung, Reaktionen auf Formularzustände, das Hervorheben der Navigation und viele Muster, die zuvor JavaScript-Manipulationen am DOM erforderten – alles deklarativ in CSS.

Häufig gestellte Fragen

Ist die Lektion „:has()-Relationspseudo-Klasse“ kostenlos?

Ja — der vollständige Text von „:has()-Relationspseudo-Klasse“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des CSS Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der CSS Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „:has()-Relationspseudo-Klasse“?

Wählen Sie über die leistungsfähige Relationspseudo-Klasse :has() Elternelemente anhand ihrer untergeordneten Elemente aus. Du übst CSS Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um CSS Academy zu starten?

Keine Vorkenntnisse erforderlich. CSS Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „:has()-Relationspseudo-Klasse“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser CSS Academy-Lektion Code schreiben und ausführen?

Ja. Jede CSS Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Native CSS-Verschachtelung
  2. :has()-Relationspseudo-Klasse
  3. @scope für begrenzte Stile
  4. View Transitions API
← Zurück zu CSS Academy