[Easy] 🏷️ Pseudo-Elemente
Was sind Pseudo-Elemente
Pseudo-Elemente (Pseudo-elements) sind CSS-Schlüsselwörter, die verwendet werden, um bestimmte Teile eines Elements auszuwählen oder Inhalte vor oder nach einem Element einzufügen. Sie verwenden die Doppelpunkt-Syntax :: (CSS3-Standard), um sich von Pseudo-Klassen (pseudo-classes) mit der Einzelpunkt-Syntax : zu unterscheiden.
Gängige Pseudo-Elemente
1. ::before und ::after
Die am häufigsten verwendeten Pseudo-Elemente, die zum Einfügen von Inhalten vor oder nach dem Elementinhalt verwendet werden.
.icon::before {
content: '📌';
margin-right: 8px;
}
.external-link::after {
content: ' ↗';
font-size: 0.8em;
}
Eigenschaften:
- Müssen die Eigenschaft
contententhalten (auch wenn es ein leerer String ist) - Sind standardmäßig
inline-Elemente - Erscheinen nicht im DOM, können nicht von JavaScript ausgewählt werden
2. ::first-letter
Wählt den ersten Buchstaben des Elements aus, häufig für Initialen im Magazinstil verwendet.
.article::first-letter {
font-size: 3em;
font-weight: bold;
float: left;
line-height: 1;
margin-right: 8px;
}
3. ::first-line
Wählt die erste Textzeile des Elements aus.
.intro::first-line {
font-weight: bold;
color: #333;
}
Hinweis: ::first-line kann nur für Block-Level-Elemente verwendet werden.
4. ::selection
Passt den Stil an, wenn der Benutzer Text auswählt.
::selection {
background-color: #ffeb3b;
color: #000;
}
/* Firefox benötigt Präfix */
::-moz-selection {
background-color: #ffeb3b;
color: #000;
}
5. ::placeholder
Passt den Stil des Formular-Placeholders an.
input::placeholder {
color: #999;
font-style: italic;
opacity: 0.7;
}
6. ::marker
Passt den Stil des Listenzeichens (list marker) an.
li::marker {
content: '✓ ';
color: green;
font-size: 1.2em;
}
7. ::backdrop
Wird für die Hintergrundmaske von Vollbild-Elementen verwendet (wie <dialog> oder Vollbild-Videos).
dialog::backdrop {
background: rgba(0, 0, 0, 0.8);
backdrop-filter: blur(5px);
}
Praktische Anwendungsszenarien
1. Dekorative Icons und Symbole
Ohne zusätzliche HTML-Elemente, reine CSS-Implementierung:
.success::before {
content: '✓';
display: inline-block;
width: 20px;
height: 20px;
background-color: green;
color: white;
border-radius: 50%;
text-align: center;
margin-right: 8px;
}
Anwendungsfall: Wenn man keine rein dekorativen Elemente im HTML hinzufügen möchte.
2. Clearfix (Float-Bereinigung)
Die klassische Float-Bereinigungstechnik:
.clearfix::after {
content: '';
display: table;
clear: both;
}
Anwendungsfall: Wenn das Elternelement gefloatete Kindelemente enthält und die Höhe des Elternelements expandiert werden muss.
3. Anführungszeichen-Dekoration
Automatisch Anführungszeichen zu zitiertem Text hinzufügen:
blockquote::before {
content: open-quote;
font-size: 2em;
color: #ccc;
}
blockquote::after {
content: close-quote;
font-size: 2em;
color: #ccc;
}
blockquote {
quotes: '"' '"' '' ' ' '';
}
Anwendungsfall: Zitatblöcke verschönern, ohne manuell Anführungszeichen einzugeben.
4. Reine CSS-Formen
Pseudo-Elemente nutzen, um geometrische Formen zu erstellen:
.arrow {
position: relative;
width: 100px;
height: 40px;
background: #3498db;
}
.arrow::after {
content: '';
position: absolute;
right: -20px;
top: 0;
width: 0;
height: 0;
border-left: 20px solid #3498db;
border-top: 20px solid transparent;
border-bottom: 20px solid transparent;
}
Anwendungsfall: Pfeile, Dreiecke und andere einfache Formen ohne Bilder oder SVG erstellen.
5. Pflichtfeld-Markierung
Roten Stern zu Pflichtfeldern im Formular hinzufügen:
.required::after {
content: ' *';
color: red;
font-weight: bold;
}
Anwendungsfall: Pflichtfelder kennzeichnen und dabei die HTML-Semantik sauber halten.
6. Externer-Link-Kennzeichnung
Automatisch Symbol für externe Links hinzufügen:
a[href^='http']::after {
content: ' 🔗';
font-size: 0.8em;
opacity: 0.6;
}
/* Oder mit Icon Font */
a[target='_blank']::after {
content: '\f08e'; /* Font Awesome Externer-Link-Symbol */
font-family: 'FontAwesome';
margin-left: 4px;
}
Anwendungsfall: Die Benutzererfahrung verbessern, indem der Benutzer weiß, dass ein neuer Tab geöffnet wird.
7. Zähler-Nummerierung
CSS-Zähler für automatische Nummerierung verwenden:
.faq-list {
counter-reset: faq-counter;
}
.faq-item::before {
counter-increment: faq-counter;
content: 'Q' counter(faq-counter) '. ';
font-weight: bold;
color: #3498db;
}
Anwendungsfall: Automatisch Nummerierungen generieren, ohne manuelle Pflege.
8. Overlay-Effekt
Hover-Overlay für Bilder hinzufügen:
.image-card {
position: relative;
}
.image-card::after {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0);
transition: background 0.3s;
}
.image-card:hover::after {
background: rgba(0, 0, 0, 0.5);
}
Anwendungsfall: Wenn man keine zusätzlichen HTML-Elemente für Overlay-Effekte hinzufügen möchte.
Pseudo-Elemente vs Pseudo-Klassen
| Eigenschaft | Pseudo-Elemente (::) | Pseudo-Klassen (:) |
|---|---|---|
| Syntax | Doppelpunkt ::before | Einzelpunkt :hover |
| Funktion | Erstellen/Auswählen bestimmter Elementteile | Auswählen bestimmter Elementzustände |
| Beispiele | ::before, ::after, ::first-letter | :hover, :active, :nth-child() |
| DOM | Existieren nicht im DOM | Wählen tatsächliche DOM-Elemente aus |
Häufige Fallstricke
1. Die content-Eigenschaft muss vorhanden sein
::before und ::after müssen die Eigenschaft content haben, andernfalls werden sie nicht angezeigt:
/* Wird nicht angezeigt */
.box::before {
width: 20px;
height: 20px;
background: red;
}
/* Korrekt */
.box::before {
content: ''; /* Auch ein leerer String muss hinzugefügt werden */
display: block;
width: 20px;
height: 20px;
background: red;
}
2. Kann nicht für ersetzte Elemente verwendet werden
Bestimmte Elemente (wie <img>, <input>, <iframe>) können ::before und ::after nicht verwenden:
/* Ungültig */
img::before {
content: 'Photo:';
}
/* Verwenden Sie ein Wrapper-Element */
.image-wrapper::before {
content: 'Photo:';
}
3. Standardmäßig inline-Elemente
::before und ::after sind standardmäßig inline-Elemente. Beim Setzen von Breite und Höhe ist Vorsicht geboten:
.box::before {
content: '';
display: block; /* oder inline-block */
width: 100px;
height: 100px;
}
4. z-index Schichtungsprobleme
Der z-index des Pseudo-Elements ist relativ zum Elternelement:
.parent {
position: relative;
}
.parent::before {
content: '';
position: absolute;
z-index: -1; /* Liegt unter dem Elternelement, aber über dessen Hintergrund */
}
5. Rückwärtskompatibilität mit einzelnem Doppelpunkt
Die CSS3-Spezifikation verwendet doppelte Doppelpunkte :: zur Unterscheidung von Pseudo-Elementen und Pseudo-Klassen, aber einzelne Doppelpunkte : funktionieren weiterhin (Rückwärtskompatibilität mit CSS2):
/* CSS3-Standardschreibweise (empfohlen) */
.box::before {
}
/* CSS2-Schreibweise (funktioniert weiterhin) */
.box:before {
}
Interview-Schwerpunkte
- Doppelpunkt-Syntax der Pseudo-Elemente: Unterscheidung von Pseudo-Elementen
::und Pseudo-Klassen: - Die content-Eigenschaft muss vorhanden sein: Schlüssel für
::beforeund::after - Nicht im DOM: Können nicht direkt von JavaScript ausgewählt oder manipuliert werden
- Nicht verwendbar für ersetzte Elemente:
<img>,<input>usw. funktionieren nicht - Praktische Anwendungsszenarien: Dekorative Icons, Clearfix, Formenzeichnung usw.