Pseudoklassen erweitern CSS-Selektoren und wählen Elemente abhängig von
ihrem Zustand, ihrer Position oder bestimmten Eigenschaften aus. Dadurch
können Elemente gestaltet werden, ohne zusätzliche Klassen in das HTML
einzufügen.
Diese Seite behandelt die Grundlagen sowie wichtige Pseudoklassen für
Links, Benutzeraktionen, Fokus und Formulare.
Unterschied zwischen Pseudoklassen und Pseudoelementen
Eine Pseudoklasse wählt ein vorhandenes Element aufgrund
eines bestimmten Zustands oder seiner Position in der Dokumentstruktur aus.
Sie wird mit einem Doppelpunkt geschrieben.
a:hover {
color: red;
}
In diesem Beispiel wird ein Link formatiert, während sich der Mauszeiger
darüber befindet.
Ein Pseudoelement wählt einen bestimmten Teil eines
Elements aus oder erzeugt einen zusätzlichen Bereich. Es wird normalerweise
mit zwei Doppelpunkten geschrieben.
p::first-letter {
font-size: 2em;
}
In diesem Beispiel wird der erste Buchstabe jedes Absatzes formatiert.
Merkmal
Pseudoklasse
Pseudoelement
Aufgabe
Wählt ein Element nach Zustand oder Position aus
Wählt einen Teil eines Elements aus oder erzeugt Inhalt
Schreibweise
:
::
Beispiel
a:hover
p::first-letter
Typische Anwendung
Hover, Fokus, Formularzustand oder Position
Erste Zeile, erster Buchstabe oder erzeugter Inhalt
Syntax
Pseudoklassen werden mit einem Doppelpunkt zwischen dem Selektor und dem
Namen der Pseudoklasse geschrieben.
selector:pseudoklasse {
eigenschaft: wert;
}
Pseudoelemente werden nach der aktuellen Schreibweise mit zwei
Doppelpunkten angegeben.
selector::pseudoelement {
eigenschaft: wert;
}
Bei älteren Pseudoelementen wie :before,
:after, :first-line und
:first-letter unterstützen Browser aus historischen Gründen
auch die Schreibweise mit nur einem Doppelpunkt. In neuem CSS sollte jedoch
die Schreibweise mit zwei Doppelpunkten verwendet werden.
Pseudoklassen für Links, Maus und Tastatur
Einige Pseudoklassen reagieren auf den Zustand eines Links oder auf die
Bedienung mit Maus und Tastatur. Dazu gehören beispielsweise
:link, :visited, :hover,
:active und :focus-visible.
Pseudoklassen für Links
Links können abhängig davon formatiert werden, ob sie bereits besucht
wurden oder sich gerade in einem bestimmten Bedienzustand befinden.
Pseudoklasse
Bedeutung
:link
Wählt einen noch nicht besuchten Link aus.
:visited
Wählt einen bereits besuchten Link aus.
:any-link
Wählt alle Elemente aus, die als Hyperlink verwendet werden –
unabhängig davon, ob sie bereits besucht wurden.
:hover
Wählt ein Element aus, während sich der Mauszeiger darüber
befindet.
:active
Wählt ein Element während seiner Aktivierung aus, beispielsweise
während eine Maustaste gedrückt wird.
Nicht besuchte und besuchte Links
Mit :link werden noch nicht besuchte Links ausgewählt.
:visited formatiert Links, deren Ziel bereits aufgerufen
wurde.
Aus Datenschutzgründen dürfen Browser bei :visited nur
bestimmte Darstellungen verändern. Gut geeignet sind beispielsweise
Textfarbe, Rahmenfarbe und Hintergrundfarbe. Eigenschaften, die Inhalte
oder das Layout beeinflussen, sind eingeschränkt.
Alle Links mit :any-link auswählen
Die Pseudoklasse :any-link wählt sowohl besuchte als auch
nicht besuchte Links aus. Sie entspricht damit grundsätzlich der
gemeinsamen Auswahl mit :link und :visited.
Auf Geräten mit Touchscreen gibt es nicht immer einen dauerhaften
Hoverzustand. Wichtige Informationen und Funktionen dürfen deshalb nicht
ausschließlich über :hover zugänglich sein.
:active
Die Pseudoklasse :active wirkt während der Aktivierung eines
Elements. Bei einem Button ist das normalerweise der kurze Zeitraum,
während die Maustaste gedrückt wird.
:active beschreibt nur den momentanen Bedienzustand. Es
bedeutet nicht, dass ein Navigationselement dauerhaft die aktuelle Seite
kennzeichnet. Dafür wird normalerweise eine Klasse wie
.active verwendet.
:focus, :focus-visible und :focus-within
Fokus-Pseudoklassen sind besonders wichtig für die Bedienung mit der
Tastatur. Ein sichtbarer Fokus zeigt, welches Element momentan mit der
Tastatur bedient werden kann.
Pseudoklasse
Bedeutung
:focus
Wählt das Element aus, das momentan den Eingabefokus besitzt.
:focus-visible
Wählt ein fokussiertes Element aus, wenn der Browser einen
sichtbaren Fokusindikator für sinnvoll hält.
:focus-within
Wählt ein Element aus, wenn es selbst oder eines seiner
untergeordneten Elemente den Fokus besitzt.
:focus
:focus wird auf ein Element angewendet, sobald es den Fokus
erhält. Das kann beispielsweise durch Anklicken oder mit der
Tab-Taste geschehen.
:focus-visible wird verwendet, wenn ein deutlich sichtbarer
Fokusindikator erforderlich ist. Das ist besonders bei der Bedienung mit
der Tastatur wichtig.
Ein Fokusrahmen sollte nicht ersatzlos entfernt werden. Die Anweisung
outline: none ist nur dann sinnvoll, wenn stattdessen ein
anderer gut sichtbarer Fokusindikator gestaltet wird.
:focus-within
:focus-within wählt einen übergeordneten Bereich aus, sobald
dieser selbst oder ein darin enthaltenes Element den Fokus besitzt.
Dadurch kann beispielsweise die gesamte Gruppe aus Beschriftung und
Eingabefeld hervorgehoben werden, obwohl nur das Eingabefeld selbst den
Fokus besitzt.
Pseudoklassen für Formulare
Mit Formular-Pseudoklassen können Eingabefelder abhängig von ihrem Zustand
oder der Gültigkeit ihrer Eingabe ausgewählt werden. Dadurch lassen sich
Formulare verständlicher und benutzerfreundlicher gestalten.
Zustände von Formularelementen
Formularelemente können aktiviert, deaktiviert, ausgewählt oder nur zum
Lesen bestimmt sein. CSS stellt dafür verschiedene Pseudoklassen bereit.
Pseudoklasse
Bedeutung
:enabled
Wählt aktivierte Formularelemente aus, die verwendet werden können.
:disabled
Wählt Formularelemente aus, die mit dem Attribut
disabled deaktiviert wurden.
:checked
Wählt aktivierte Kontrollkästchen und Optionsfelder sowie ausgewählte
option-Elemente aus.
:indeterminate
Wählt Formularelemente aus, deren Auswahlzustand nicht eindeutig
festgelegt ist.
:read-only
Wählt Elemente aus, deren Inhalt nicht vom Benutzer bearbeitet
werden kann.
:read-write
Wählt Elemente aus, deren Inhalt vom Benutzer bearbeitet werden
kann.
:enabled und :disabled
Die Pseudoklasse :enabled wählt verwendbare Formularelemente
aus. Mit :disabled werden Elemente ausgewählt, die durch das
HTML-Attribut disabled deaktiviert wurden.
Die Eigenschaft accent-color legt die Akzentfarbe
beispielsweise für Kontrollkästchen und Optionsfelder fest.
Im zweiten Selektor wählt :has() die Beschriftung aus, wenn
das darin enthaltene Eingabefeld ausgewählt ist. :has()
behandeln wir später noch ausführlich.
:indeterminate
Die Pseudoklasse :indeterminate beschreibt einen
unbestimmten Auswahlzustand. Bei einem Kontrollkästchen muss dieser Zustand
normalerweise mit JavaScript gesetzt werden.
Ein Feld mit readonly kann nicht bearbeitet werden, wird aber
beim Absenden des Formulars grundsätzlich mitgesendet. Ein Feld mit
disabled wird dagegen normalerweise nicht mitgesendet.
Pflichtfelder und optionale Felder
Die Pseudoklassen :required und :optional
unterscheiden zwischen Pflichtfeldern und freiwillig ausfüllbaren
Eingabefeldern.
Pseudoklasse
Bedeutung
:required
Wählt Formularelemente aus, die mit dem Attribut
required als Pflichtfeld gekennzeichnet sind.
:optional
Wählt Formularelemente aus, bei denen keine Eingabe verpflichtend
ist.
Eine farbliche Kennzeichnung allein reicht nicht aus, um ein Pflichtfeld
verständlich zu kennzeichnen. Zusätzlich sollte ein sichtbarer Hinweis wie
„Pflichtfeld“ oder ein erklärtes Sternchen verwendet werden.
Gültigkeit von Eingaben
Browser können viele Eingaben anhand der HTML-Attribute automatisch
überprüfen. CSS kann auf das Ergebnis dieser Prüfung reagieren.
Pseudoklasse
Bedeutung
:valid
Wählt ein Formularelement aus, dessen aktueller Wert die
festgelegten Anforderungen erfüllt.
:invalid
Wählt ein Formularelement aus, dessen aktueller Wert mindestens
eine Anforderung nicht erfüllt.
:in-range
Wählt ein Eingabefeld aus, dessen Wert innerhalb des mit
min und max festgelegten Bereichs liegt.
:out-of-range
Wählt ein Eingabefeld aus, dessen Wert außerhalb des erlaubten
Bereichs liegt.
:placeholder-shown
Wählt ein Eingabefeld aus, solange sein Platzhalter sichtbar ist.
:valid und :invalid
Ob eine Eingabe gültig ist, hängt unter anderem vom Eingabetyp und von
Attributen wie required, pattern,
minlength oder maxlength ab.
Ein leeres Pflichtfeld ist bereits beim Laden der Seite ungültig. Deshalb
kann eine sofort sichtbare rote Fehlermarkierung störend wirken. Häufig ist
es sinnvoll, den Zustand zusätzlich mit :focus,
:placeholder-shown oder einer durch JavaScript gesetzten
Klasse zu verbinden.