CSS Pseudoelemente
Pseudoelemente ermöglichen es, Teile eines Elements zu stylen (z.B. erster Buchstabe, erste Zeile oder zusätzlicher „virtueller“ Inhalt). Sie sind ideal für visuelle Details – nicht für semantisch relevante Inhalte.
Pseudo: Elemente & Klassen
Pseudoelemente vs. Pseudoklassen
:hoverPseudoklasse: Zustand/Position („wann / welches Element?“)::beforePseudoelement: Teil/Fragment („was für ein Teil?“)
Typische Einsätze: Marker, Icons, Labels, dekorative Elemente.
Merksatz: Pseudoklasse = welches Element? | Pseudoelement = welcher Teil?
Wichtig: :first-child / :nth-child() sind Pseudoklassen (wählen ein Element), nicht Pseudoelemente (stylen ein Fragment).
Syntax
Moderne Schreibweise: Doppelter Doppelpunkt ::.
Das ist ein klarer Hinweis: Es geht um ein Fragment, nicht um einen Zustand.
p::first-letter { ... }
p::before { ... }
Die wichtigsten Pseudoelemente
::before und ::after
Erzeugen zusätzlichen, virtuellen Inhalt.
Dieser Inhalt existiert nicht im HTML. Auch wenn Text ausgegeben wird, ist dieser nicht anklickbar.
::before und ::after können mit CSS gestylt und positioniert werden.
Wichtig: Ohne content wird nichts angezeigt.
Beispiel 1
Ich bin ein Paragraph mit einem ::before Element. (HTML Emojis)
.hint::before {
content: " \2603 ";
font-size: 30px;
color: blue;
}
Beispiel 2
Ich bin ein Paragraph mit einem ::before und einem ::after Element.
.wichtig::before {
content: "\276F";
color: red;
}
.wichtig::after {
content: "\276E";
color: red;
}
Beispiel 3
Ein ::after-Element kann über die content-Eigenschaft praktisch jede Art von Inhalt einfügen (Text, Bilder, Zitate, Attribute, Zähler) und wird dann mit normalen CSS-Eigenschaften gestylt.
.box::after{
content: "";
background: red;
width: 50px;
height: 50px;
position: absolute;
border-radius: 50%;
right: -15px;
top: -15px;
}
::first-letter
Gestaltet den ersten Buchstaben (typisch: Editorial / Einleitung).
.intro::first-letter {
font-size: 2rem;
color: teal;
}
::first-line
Gestaltet die erste Zeile. Die erste Zeile ist layout-abhängig: Ändert sich die Breite, kann sich auch die erste Zeile ändern.
p.demo::first-line {
font-size: 1.5rem;
color: yellowgreen;
/* text-transform: uppercase; */ /* wird ignoriert */
}
Warum funktioniert text-transform: uppercase hier nicht?::first-line darf nur Eigenschaften verwenden, die den Text nicht verändern. text-transform verändert den Textinhalt selbst und könnte dadurch den Zeilenumbruch verändern. Deshalb wird diese Eigenschaft vom Browser ignoriert.
Wichtig: ::first-line darf das Aussehen ändern – nicht den Text selbst.
::selection
Gestaltet markierten Text (rein visuell, kein DOM-Element).
::selection{
background: indigo;
color: white;
}
::marker
Das CSS-Pseudoelement ::marker wird verwendet, um die Markierungen von Listenelementen zu stylen. Dazu gehören standardmässig die Aufzählungspunkte (Bullets) bei ungeordneten Listen (<ul>) oder die Nummerierung bei geordneten Listen (<ol>).
- HTML-Struktur
- CSS anwenden
- Testen
.steps li::marker {
font-weight: bold;
color: red;
}
Wichtig: ::marker erlaubt nur wenige CSS-Eigenschaften
(z. B. color, font-size, font-weight).
Layout-Eigenschaften wie margin oder position funktionieren nicht
Kurz gesagt
::before/::after= zusätzlicher virtueller Inhalt (mitcontent)::first-letter/::first-line= typografische Fragmente::selection= Markierung stylen:first-child/:nth-child()= Pseudoklassen (Position), nicht Pseudoelemente
Siehe auch Pseudoklassen