Kreative Möglichkeiten zum Stylen von Listen mit CSS
Standard-Browser-Listen passen selten zu einem echten Design. Ob Sie ein Navigationsmenü, eine Schritt-für-Schritt-Anleitung oder eine Produktfeature-Liste erstellen – CSS-Listenstyling bietet Ihnen die Werkzeuge, um sie gezielt zu gestalten. Dieser Artikel behandelt die praktischsten, standardbasierten Techniken – von nativen Listeneigenschaften über CSS-Zähler bis hin zu benutzerdefinierten Markierungen – ohne die Barrierefreiheit zu beeinträchtigen.
Wichtigste Erkenntnisse
- Wählen Sie das korrekte semantische HTML-Listenelement (
<ul>,<ol>oder<dl>), bevor Sie CSS anwenden, da Screenreader auf dieser Struktur basieren. - Verwenden Sie
::markerfür einfache Änderungen von Markierungsfarbe und Schriftart, und::beforemit Flexbox, wenn Sie vollständige Layout-Kontrolle über benutzerdefinierte Aufzählungszeichen benötigen. - CSS-Zähler ermöglichen benutzerdefinierte Nummerierungsformate, einschließlich mehrstufiger hierarchischer Nummerierung mit
counters(). - Erwägen Sie das Hinzufügen von
role="list", wenn Sielist-style: noneauf bedeutungstragende Listen anwenden, insbesondere um die Listensemantik für Safari/VoiceOver zu erhalten.
Mit dem richtigen HTML-Listentyp beginnen
Bevor Sie CSS verwenden, wählen Sie das richtige Element:
<ul>— ungeordnete Listen, bei denen die Reihenfolge keine Rolle spielt (Navigationsmenüs, Feature-Listen)<ol>— geordnete Listen, bei denen die Reihenfolge bedeutsam ist (Anleitungen, Rankings)<dl>— Definitionslisten, die Begriffe mit Definitionen paaren (Glossare, Metadaten)
Semantisches HTML ist hier wichtig. Screenreader geben Listentyp und Elementanzahl bekannt, was Nutzern hilft, den Kontext zu verstehen, bevor sie ein einzelnes Element lesen.
Die list-style-*-Eigenschaften: Ihr Ausgangspunkt
Die list-style-Kurzschreibweise bündelt drei Eigenschaften:
ul {
list-style: square inside none;
/* list-style-type | list-style-position | list-style-image */
}
list-style-position sollte klar verstanden werden:
outside(Standard) — die Markierung sitzt im Margin, und der Text bleibt sauber ausgerichtetinside— die Markierung fließt mit dem Text, was bei mehrzeiligen Elementen zum Umbruch führt
list-style-image existiert, ist aber eingeschränkt – Sie können das Bild weder skalieren noch neu positionieren. Für benutzerdefinierte Bild-Bullets bietet Ihnen ein ::before-Pseudoelement mit background-image deutlich mehr Kontrolle.
Native Markierungen mit CSS ::marker stylen
Das ::marker-Pseudoelement ermöglicht es Ihnen, das eingebaute Aufzählungszeichen oder die Nummer direkt zu stylen – ohne zusätzliches Markup:
li::marker {
color: deeppink;
font-size: 1.2em;
font-weight: bold;
}
Wichtige Einschränkung: ::marker unterstützt nur eine bestimmte Teilmenge von CSS-Eigenschaften: color, content, font-*, direction, unicode-bidi, white-space, text-combine-upright sowie Animations- und Transition-Eigenschaften. Sie können display, background, padding, margin oder Positionierung nicht anwenden. Betrachten Sie es als Text-Level-Styling-Hook, nicht als vollständiges Element.
Die Browser-Unterstützung für ::marker ist in aktuellen Browsern gut, aber prüfen Sie Ihre Ziel-Browser-Matrix. Es ist normalerweise die sauberste Option für einfache Farb- oder Schriftänderungen an nativen Markierungen.
Benutzerdefinierte Listen-Bullets mit ::before
Wenn ::marker nicht ausreicht – für Icon-artige Bullets, komplexe Ausrichtung oder Übergänge – verwenden Sie stattdessen ::before:
ul {
list-style: none;
padding-left: 0;
}
ul li {
display: flex;
align-items: flex-start;
gap: 0.5rem;
}
ul li::before {
content: "✓";
color: green;
flex-shrink: 0;
}
Barrierefreiheits-Hinweis: Das Setzen von
list-style: nonekann dazu führen, dass Safari/VoiceOver das Element nicht mehr als Liste erkennt. Wenn die Listensemantik bedeutsam ist, fügen Sierole="list"zum<ul>oder<ol>hinzu.
Discover how at OpenReplay.com.
CSS-Zähler für gestylte geordnete Listen
CSS-Zähler geben Ihnen volle Kontrolle über die Nummerierungsformatierung – nützlich für gestylte geordnete Listen mit benutzerdefinierten Präfixen, Suffixen oder mehrstufiger Nummerierung:
ol {
list-style: none;
counter-reset: steps;
}
ol li {
counter-increment: steps;
}
ol li::before {
content: "Schritt " counter(steps) ". ";
font-weight: bold;
color: #333;
}
Verschachtelte Zähler
Für verschachtelte Listen gibt counters() (Plural) die vollständige Hierarchie aus:
ol {
list-style: none;
counter-reset: steps;
}
ol li {
counter-increment: steps;
}
ol li::before {
content: counters(steps, ".") " ";
}
/* Ausgabe: 1, 1.1, 1.2, 2, 2.1 */
Die counter-increment-Eigenschaft akzeptiert auch eine Schrittgröße: counter-increment: steps 2 erhöht jedes Mal um zwei.
Ein Hinweis zu @counter-style
Die @counter-style-At-Regel ermöglicht es Ihnen, völlig benutzerdefinierte Zählsysteme zu definieren – benutzerdefinierte Symbole, Alphabete oder zyklische Muster:
@counter-style thumbs {
system: cyclic;
symbols: "👍" "👎";
suffix: " ";
}
ul {
list-style-type: thumbs;
}
Mit Vorsicht verwenden. Die Browser-Unterstützung für @counter-style bleibt unvollständig – insbesondere Safari hat die Unterstützung erst in Version 17 hinzugefügt. Testen Sie immer in Ihren Ziel-Browsern und definieren Sie einen list-style-type-Fallback auf demselben Element, um eine würdevolle Degradierung zu gewährleisten.
Die richtige Herangehensweise wählen
| Ziel | Beste Technik |
|---|---|
| Markierungsfarbe oder Schriftart ändern | ::marker |
| Benutzerdefiniertes Icon oder komplexe Ausrichtung | ::before mit Flexbox |
| Benutzerdefinierte Nummerierungsformatierung | CSS-Zähler mit ::before |
| Benutzerdefiniertes Zählsystem | @counter-style (mit Fallback) |
Fazit
Gutes CSS-Listenstyling beginnt mit semantischem HTML und schichtet visuelle Verbesserungen darüber. Verwenden Sie ::marker für leichtgewichtige Farb- und Schriftänderungen, ::before, wenn Sie Layout-Kontrolle benötigen, und CSS-Zähler, wenn geordnete Listen benutzerdefinierte Nummerierung benötigen. Vermeiden Sie das Entfernen von Listensemantik, ohne sie über ARIA wiederherzustellen. Jede Technik hat einen klaren Anwendungsfall – wählen Sie diejenige, die zu Ihrem Design passt, ohne es zu verkomplizieren.
FAQs
Ja, technisch gesehen, aber normalerweise wählen Sie eine Markierungsstrategie. Wenn Sie die native Markierung mit list-style: none entfernen, verwenden Sie ::before für das benutzerdefinierte Bullet. Wenn Sie die native Markierung beibehalten, verwenden Sie ::marker für einfache Farb- und Schriftanpassungen.
Safaris Barrierefreiheits-Heuristiken interpretieren list-style: none als Signal, dass das Element für Layout statt als semantische Liste verwendet wird. Dies führt dazu, dass VoiceOver es nicht mehr als Liste ankündigt. Das Hinzufügen von role list zum ul- oder ol-Element stellt die Listensemantik explizit wieder her, sodass assistive Technologien weiterhin die korrekte Struktur und Elementanzahl melden.
Ja. CSS-Zähler sind nicht auf Listenelemente beschränkt. Sie können counter-reset und counter-increment auf jedes Element anwenden, wie divs, Überschriften oder Abschnitte, und den Zählerwert mithilfe der content-Eigenschaft auf einem Pseudoelement anzeigen. Dies macht sie nützlich für die Nummerierung von Kapiteln, Abbildungen oder beliebigen sich wiederholenden Inhaltsmustern.
Setzen Sie das ul auf display flex und entfernen Sie Standard-Listenstile mit list-style none und padding-left 0. Stylen Sie dann jedes li oder seinen Anker als inline Flex-Item mit angemessenem Abstand über gap oder margin. Denken Sie daran, role list zum ul hinzuzufügen, wenn Screenreader es in Safari weiterhin als Navigationsliste ankündigen sollen.
Truly understand users experience
See every user interaction, feel every frustration and track all hesitations with OpenReplay — the open-source digital experience platform. It can be self-hosted in minutes, giving you complete control over your customer data. . Check our GitHub repo and join the thousands of developers in our community..