Menu

CSS Selektoren: Typen, Kombinatoren und Attributselektoren

Ein CSS-Selektor wählt die Elemente aus, die eine Regel gestaltet. Hier lernst du jeden Selektortyp, die vier Kombinatoren (Nachfahre, Kind, direkter Nachbar, allgemeiner Nachbar), Attributselektoren und Gruppierung, und du testest Selektoren live.

Diese Seite enthält ausführbare Editoren - bearbeiten, ausführen und Ausgabe sofort sehen.

Was ein CSS-Selektor ist

Ein Selektor ist der Teil einer Regel vor den geschweiften Klammern. Er entscheidet, für welche Elemente die Deklarationen gelten.

p.note { color: #2563eb; }
/* selector: p.note    declaration: color: #2563eb */

Die fünf grundlegenden Selektoren decken die meisten echten Stylesheets ab:

Selektortypen im Überblick

SelektorBeispielTrifft
Universal*Jedes Element
TyppJedes <p>
Klasse.tipElemente mit class="tip" (unter anderem)
ID#main-titleDas Element mit id="main-title"
Attribut[type="email"]Elemente, deren Attribut passt
Pseudoklassea:hover, li:first-childElemente in einem Zustand oder an einer Position
Pseudoelementp::first-line, .x::beforeEinen Teil eines Elements
Gruppeh1, h2, h3Alles, was auf einen Eintrag der Liste passt
Zusammengesetztp.tipEin <p>, das zusätzlich die Klasse hat

Klassen und IDs haben eine eigene Seite, CSS Klassenselektor. Pseudoklassen wie :nth-child() und :not() stehen auf der Seite zu Pseudoklassen.

Kombinatoren: Nachfahre vs. Kind

Ein Kombinator verbindet zwei Selektoren über ihre Beziehung im HTML-Baum. Es gibt vier.

KombinatorSyntaxTrifft B, wenn
NachfahreA B (Leerzeichen)B irgendwo in A steht
KindA > BA das Elternelement von B ist
Direkter NachbarA + BB direkt nach A kommt, gleiches Elternelement
Allgemeiner NachbarA ~ BB irgendwo nach A kommt, gleiches Elternelement

Das Leerzeichen und das > sind das Paar, das oft verwechselt wird. Der Nachfahrenselektor reicht in jede Tiefe; der Kindselektor hört nach einer Ebene auf:

Geschwister-Kombinatoren: + und ~

Geschwister-Kombinatoren schauen nur nach vorn. Einen Kombinator für das „vorherige Geschwister“ gibt es nicht, aber :has() kann es ausdrücken: h2:has(+ p) trifft ein h2, auf das direkt ein p folgt.

Attributselektoren

Eckige Klammern prüfen Attribute und ihre Werte:

SelektorTrifft
[disabled]Hat das Attribut, beliebiger Wert
[type="email"]Wert ist genau email
[href^="https"]Wert beginnt mit https
[href$=".pdf"]Wert endet mit .pdf
[class*="icon"]Wert enthält irgendwo icon
[lang|="en"]Wert ist en oder beginnt mit en-
[data-state="open" i]Exakter Treffer, Groß- und Kleinschreibung egal

Attributselektoren auf data-*-Attributen sind ein sauberer Weg, Zustände zu stylen, die JavaScript setzt, ohne Klassennamen zu erfinden.

Probier einen beliebigen Selektor aus

Tipp einen Selektor in das Feld. Jedes Element, das er trifft, bekommt eine bernsteinfarbene Umrandung, und darunter steht die Anzahl.

Probier #demo a, ul > li, h2 ~ *, a[href^="https"], li:not(.active).

Zusammengesetzt vs. Nachfahre: das Leerzeichen zählt

p.note und p .note unterscheiden sich um ein Leerzeichen und bedeuten Verschiedenes.

Wie Browser Selektoren lesen

Wenn mehrere Regeln auf dasselbe Element passen und dieselbe Eigenschaft setzen, gewinnt der spezifischere Selektor, und bei Gleichstand gewinnt der spätere. Eine ID wiegt schwerer als beliebig viele Klassen, und eine Klasse schwerer als beliebig viele Typselektoren; die Seite zu !important enthält die vollständige Spezifitätstabelle.

Eine Gruppe hat einen Haken: Ist irgendein Selektor in einer einfachen Liste ungültig, wird die ganze Regel verworfen. Bei a, b:unknown { } werden nicht einmal die Links gestylt. Wenn du die Liste in :is() packst, wird sie nachsichtig, und :is(a, b:unknown) stylt die Links trotzdem.

Häufige Fehler

  • Punkt oder Raute fehlt. tip { } zielt auf ein <tip>-Element, nicht auf class="tip". Schreib .tip.
  • Leerzeichen in einem zusammengesetzten Selektor. p .note ist nicht p.note.
  • Erwarten, dass > Enkel erreicht. Für jede Tiefe nimmst du ein Leerzeichen.
  • Ein Tippfehler macht eine ganze Gruppe kaputt. Bei h1, h2:hovr, h3 wird nichts gestylt.
  • Zu lange Selektoren. body div.wrapper ul li a ist schwer zu lesen und schwer zu überschreiben. Eine einzelne Klasse reicht meistens.

Häufig gestellte Fragen

Was ist ein CSS-Selektor?

Der Teil einer CSS-Regel vor der {, der festlegt, für welche Elemente die Deklarationen gelten. In p.note { color: blue; } trifft der Selektor p.note jedes <p> mit der Klasse note.

Was ist der Unterschied zwischen einem Leerzeichen und > in einem CSS-Selektor?

Ein Leerzeichen ist der Nachfahren-Kombinator: nav a trifft jeden Link irgendwo in einem nav, in beliebiger Tiefe. > ist der Kind-Kombinator: nav > a trifft nur Links, deren direktes Elternelement das nav ist.

Was bedeutet + in CSS?

+ ist der Kombinator für den direkten Nachbarn. h2 + p trifft ein <p>, das unmittelbar auf ein <h2> mit demselben Elternelement folgt. ~ ist lockerer: h2 ~ p trifft jedes spätere <p> auf derselben Ebene.

Wie wähle ich Elemente in CSS über ein Attribut aus?

Setz das Attribut in eckige Klammern: [disabled] trifft Elemente, die es haben, [type="email"] einen exakten Wert, [href^="https"] einen Wert, der mit einem String beginnt, [href$=".pdf"] einen, der damit endet, und [class*="btn"] einen, der ihn enthält.

Kann CSS ein Elternelement auswählen?

Ja, mit der Pseudoklasse :has(), die aktuelle Versionen von Chrome, Firefox und Safari unterstützen. li:has(> a.active) trifft die Listeneinträge, die direkt einen aktiven Link enthalten.

Coddy programming languages illustration

Lerne mit Coddy zu programmieren

LOS GEHT'S