HTML Listen
Ungeordnete, geordnete und Beschreibungslisten - alle HTML-Listentypen mit Attributen, Verschachtelung und CSS-Styling.
Was sind Listen in HTML?
Listen sind ein zentrales Element in HTML. Sie strukturieren Inhalte übersichtlich - egal ob du eine Einkaufsliste, eine Navigation oder eine Schritt-für-Schritt-Anleitung erstellen möchtest.
Listen helfen, zusammengehörige Inhalte zu gliedern. Sie bestehen immer aus einem
umschließenden Listentag und einzelnen Listenelementen, den sogenannten
<li>
-Tags, den
list items
.
-
<ul>- Ungeordnete Liste (Aufzählung ohne Reihenfolge) -
<ol>- Geordnete Liste (nummerierte Reihenfolge) -
<dl>- Beschreibungsliste (Begriffe mit Definitionen)
Jedes
<li>
-Element steht für einen einzelnen Eintrag in deiner Liste. Listen können verschachtelt
werden und sogar andere HTML-Elemente enthalten - wie Links, Bilder oder Absätze.
<ul>
<li>Erster Punkt</li>
<li>Zweiter Punkt</li>
</ul>
Ungeordnete Listen - <ul>
Eine ungeordnete Liste wird mit
<ul>
erstellt. Jedes Listenelement wird mit
<li>
markiert. Sie eignet sich für Aufzählungen, bei denen die Reihenfolge keine Rolle spielt. -
wie z. B. Zutaten oder Kategorien.
- Einträge werden standardmäßig mit Punkten dargestellt.
- Die Darstellung kann später per CSS angepasst werden (z. B. Kreise, Quadrate, Symbole - ich habe mich für Pfeile entschieden).
-
Jedes Listenelement steht in einem eigenen
<li>-Tag.
<ul>
<li>Apfel</li>
<li>Banane</li>
<li>Kirsche</li>
</ul>
- Apfel
- Banane
- Kirsche
Das type-Attribut (veraltet)
Früher konnte man mit dem
type
-Attribut das Aufzählungszeichen ändern. Das ist heute veraltet - nutze stattdessen CSS
list-style-type
. Zur Vollständigkeit hier die alten Werte:
| Wert | Zeichen | Beispiel |
|---|---|---|
disc |
Ausgefüllter Kreis (Standard) | ● |
circle |
Leerer Kreis | ○ |
square |
Quadrat | ■ |
Das
type
-Attribut bei
<ul>
ist in HTML5 veraltet. Verwende stattdessen die CSS-Eigenschaft
list-style-type
für die Gestaltung.
Geordnete Listen - <ol>
Geordnete Listen werden automatisch nummeriert. Sie sind ideal für Schritt-für-Schritt-Anleitungen, Ranglisten oder andere Inhalte, bei denen die Reihenfolge wichtig ist.
- Die Punkte werden automatisch nummeriert.
-
Mit dem
type-Attribut kannst du den Stil ändern (z. B. Zahlen, Buchstaben, römische Ziffern). -
Nummerierung kann über
startangepasst werden.
<ol>
<li>Wasser kochen</li>
<li>Teebeutel hinzufügen</li>
<li>Ziehen lassen</li>
</ol>
- Wasser kochen
- Teebeutel hinzufügen
- Ziehen lassen
Das type-Attribut
Mit dem
type
-Attribut änderst du das Nummerierungsformat:
| Wert | Beschreibung | Beispiel |
|---|---|---|
1 |
Dezimalzahlen (Standard) | 1, 2, 3... |
a |
Kleinbuchstaben | a, b, c... |
A |
Großbuchstaben | A, B, C... |
i |
Kleine römische Zahlen | i, ii, iii... |
I |
Große römische Zahlen | I, II, III... |
<ol type="a">
<li>Erster Schritt</li>
<li>Zweiter Schritt</li>
</ol>
- Erster Schritt
- Zweiter Schritt
Das start-Attribut
Mit
start
legst du fest, bei welcher Nummer die Liste beginnt. Das ist besonders nützlich, wenn du
eine lange Liste in mehrere Spalten aufteilen möchtest:
<!-- Liste in zwei Spalten aufteilen -->
<ol>
<li>Projekt planen</li>
<li>Design erstellen</li>
<li>HTML schreiben</li>
</ol>
<ol start="4">
<li>CSS hinzufügen</li>
<li>JavaScript einbauen</li>
<li>Testen</li>
</ol>
</div>
- Projekt planen
- Design erstellen
- HTML schreiben
- CSS hinzufügen
- JavaScript einbauen
- Testen
Der
start
-Wert ist immer eine Zahl, auch wenn du
type="a"
verwendest. Bei
start="4"
und
type="a"
beginnt die Liste bei "d".
Das reversed-Attribut
Mit
reversed
zählt die Liste rückwärts - perfekt für Countdowns oder Top-10-Listen:
<ol reversed>
<li>Bronze</li>
<li>Silber</li>
<li>Gold</li>
</ol>
- Bronze
- Silber
- Gold
Das value-Attribut auf <li>
Mit
value
auf einzelnen
<li>
-Elementen überschreibst du die Nummerierung an bestimmten Stellen:
<ol>
<li>Erster Punkt</li>
<li value="10">Sprung zu 10</li>
<li>Weiter bei 11</li>
</ol>
- Erster Punkt
- Sprung zu 10
- Weiter bei 11
Verschachtelte Listen
Listen können ineinander verschachtelt werden, um hierarchische Strukturen darzustellen. Die
innere Liste wird dabei
innerhalb
eines
<li>
-Elements platziert:
<ul>
<li>Obst
<ul>
<li>Äpfel</li>
<li>Bananen</li>
<li>Orangen</li>
</ul>
</li>
<li>Gemüse
<ul>
<li>Karotten</li>
<li>Brokkoli</li>
</ul>
</li>
<li>Getränke</li>
</ul>
-
Obst
- Äpfel
- Bananen
- Orangen
-
Gemüse
- Karotten
- Brokkoli
- Getränke
Gemischte Verschachtelung
Du kannst auch verschiedene Listentypen kombinieren, z.B. eine geordnete Liste mit ungeordneten Unterpunkten:
<ol>
<li>Vorbereitung
<ul>
<li>Zutaten besorgen</li>
<li>Werkzeug bereitlegen</li>
</ul>
</li>
<li>Durchführung
<ul>
<li>Anleitung lesen</li>
<li>Schritt für Schritt vorgehen</li>
</ul>
</li>
<li>Abschluss</li>
</ol>
-
Vorbereitung
- Zutaten besorgen
- Werkzeug bereitlegen
-
Durchführung
- Anleitung lesen
- Schritt für Schritt vorgehen
- Abschluss
Die innere Liste muss
innerhalb
des
<li>
-Elements stehen, nicht daneben. Falsch wäre:
</li><ul>...</ul>
Beschreibungslisten - <dl>
Beschreibungslisten sind eine besondere Form, mit der du Begriffe und deren Erklärungen
strukturieren kannst. Sie bestehen aus
<dt>
= Begriff /
definition term
und
<dd>
= Beschreibung /
definition description
.
<dl>
<dt>HTML</dt>
<dd>HyperText Markup Language - die Struktur einer Webseite.</dd>
<dt>CSS</dt>
<dd>Cascading Style Sheets - das Aussehen einer Webseite.</dd>
</dl>
- HTML
- HyperText Markup Language - die Struktur einer Webseite.
- CSS
- Cascading Style Sheets - das Aussehen einer Webseite.
Mehrere Beschreibungen pro Begriff
Ein Begriff kann auch mehrere Beschreibungen haben:
<dl>
<dt>JavaScript</dt>
<dd>Programmiersprache für das Web</dd>
<dd>Ermöglicht interaktive Webseiten</dd>
<dd>Läuft im Browser und auf dem Server (Node.js)</dd>
</dl>
- JavaScript
- Programmiersprache für das Web
- Ermöglicht interaktive Webseiten
- Läuft im Browser und auf dem Server (Node.js)
- Glossare oder Begriffserklärungen
- FAQ-Bereiche mit Frage und Antwort
- Produktinformationen (z. B. technische Daten)
- Metadaten (Autor, Datum, Kategorie)
Listen mit CSS stylen
CSS bietet viele Möglichkeiten, Listen zu gestalten. Hier die wichtigsten Eigenschaften:
list-style-type
Ändert das Aufzählungszeichen oder die Nummerierung:
/* Ungeordnete Listen */
ul.square-list {
list-style-type: square;
}
ul.no-bullets {
list-style-type: none;
}
/* Geordnete Listen */
ol.roman {
list-style-type: upper-roman;
}
ol.alpha {
list-style-type: lower-alpha;
}
| Wert | Beschreibung |
|---|---|
disc |
Ausgefüllter Kreis (Standard für ul) |
circle |
Leerer Kreis |
square |
Quadrat |
decimal |
Dezimalzahlen (Standard für ol) |
decimal-leading-zero |
01, 02, 03... |
lower-roman |
i, ii, iii... |
upper-roman |
I, II, III... |
lower-alpha |
a, b, c... |
upper-alpha |
A, B, C... |
none |
Keine Marker |
list-style-position
Bestimmt, ob das Aufzählungszeichen innerhalb oder außerhalb des Textflusses steht:
ul.inside {
list-style-position: inside;
}
ul.outside {
list-style-position: outside; /* Standard */
}
list-style Shorthand
Mit der Kurzschreibweise
list-style
kannst du alle Listen-Eigenschaften in einer Zeile kombinieren:
/* Syntax: list-style: type position image; */
/* Nur Typ ändern */
ul { list-style: square; }
/* Typ und Position */
ul { list-style: circle inside; }
/* Mit eigenem Bild */
ul { list-style: none inside url('/icons/check.svg'); }
/* Komplett entfernen */
ul { list-style: none; }
Die Reihenfolge der Werte ist flexibel - der Browser erkennt automatisch, was was ist.
Wenn du ein
url()
verwendest und es nicht lädt, wird der
type
als Fallback angezeigt.
Eigene Marker mit ::marker
Mit dem
::marker
Pseudo-Element kannst du das Aufzählungszeichen direkt stylen:
li::marker {
color: #e74c3c;
font-weight: bold;
font-size: 1.2em;
}
Eigene Symbole mit list-style-image
Du kannst auch eigene Bilder als Aufzählungszeichen verwenden:
ul.custom-marker {
list-style-image: url('/assets/icons/checkmark.svg');
}
/* Oder mit content für mehr Kontrolle */
ul.emoji-list {
list-style-type: none;
}
ul.emoji-list li::before {
content: "✅ ";
}
Bei Navigationen wird oft
list-style-type: none
verwendet, um die Bullets zu entfernen. Vergiss dann nicht, auch
padding-left: 0
zu setzen, um den Standard-Einzug zu entfernen.
CSS Counter für komplexe Nummerierungen
Mit CSS Countern kannst du mehrstufige Nummerierungen wie "1.1", "1.2", "2.1" erstellen - ohne JavaScript und ohne manuelle Pflege. Perfekt für Dokumentationen, Inhaltsverzeichnisse oder Rechtsdokumente.
Einfacher Counter
So ersetzt du die Standard-Nummerierung durch einen eigenen Counter:
ol.custom-counter {
counter-reset: section; /* Counter initialisieren */
list-style: none;
}
ol.custom-counter li {
counter-increment: section; /* Bei jedem li hochzählen */
}
ol.custom-counter li::before {
content: counter(section) ". "; /* Counter anzeigen */
font-weight: bold;
color: #e74c3c;
}
Mehrstufige Nummerierung (1.1, 1.2, ...)
Für verschachtelte Listen mit durchgehender Nummerierung:
<ol class="multi-level">
<li>Einleitung
<ol>
<li>Hintergrund</li>
<li>Zielsetzung</li>
</ol>
</li>
<li>Hauptteil
<ol>
<li>Methodik</li>
<li>Ergebnisse</li>
<li>Diskussion</li>
</ol>
</li>
<li>Fazit</li>
</ol>
.multi-level {
counter-reset: chapter;
list-style: none;
}
.multi-level > li {
counter-increment: chapter;
counter-reset: section; /* Sub-Counter zurücksetzen */
}
.multi-level > li::before {
content: counter(chapter) ". ";
font-weight: bold;
}
.multi-level ol {
counter-reset: section;
list-style: none;
margin-left: 1.5rem;
}
.multi-level ol li {
counter-increment: section;
}
.multi-level ol li::before {
content: counter(chapter) "." counter(section) " ";
color: #666;
}
Ergebnis:
- Mehrstufige Nummerierungen (1.1, 1.2, ...)
- Kapitel- und Abschnittsnummern in Dokumentationen
- Rechtsdokumente mit Paragraphen (§1, §2, ...)
- Figuren- oder Tabellennummerierung (Abb. 1, Abb. 2, ...)
Best Practices für Listen
- Verwende Listen nur für inhaltlich zusammengehörige Punkte.
- Verschachtel Listen nur, wenn es wirklich nötig ist - zu viele Ebenen erschweren die Lesbarkeit.
-
Nutze semantisch passende Listentypen -
<ul>für Aufzählungen,<ol>für Schritte. - Verwende CSS, um die Darstellung anzupassen, statt zusätzliche HTML-Tags zu verwenden.
Listen sind nicht nur für Text - du kannst sie auch für Navigationen, Inhaltsverzeichnisse oder Filterlisten nutzen. Sie sorgen für klare Struktur und verbessern die Barrierefreiheit deiner Website.
Barrierefreiheit bei Listen
Listen sind von Natur aus barrierefrei - Screenreader erkennen sie automatisch und geben hilfreiche Informationen wie "Liste mit 5 Elementen" aus. Aber es gibt einige Fallstricke, die du kennen solltest.
Screenreader-Verhalten
Screenreader behandeln Listen besonders:
- Sie kündigen den Listentyp an ("Liste" oder "nummerierte Liste")
- Sie nennen die Anzahl der Elemente
- Bei jedem Element wird die Position genannt ("1 von 5")
- Verschachtelte Listen werden als Unterebenen erkannt
Wichtig:
Safari (und VoiceOver) entfernt die Listensemantik, wenn du
list-style: none
verwendest! Screenreader erkennen die Liste dann nicht mehr als solche.
Lösung:
Füge
role="list"
hinzu:
<!-- ❌ Safari ignoriert die Listensemantik -->
<ul class="nav-list">
<li>Home</li>
<li>Über uns</li>
</ul>
<style>
.nav-list { list-style: none; }
</style>
<!-- ✅ Mit role="list" bleibt die Semantik erhalten -->
<ul class="nav-list" role="list">
<li>Home</li>
<li>Über uns</li>
</ul>
ARIA bei speziellen Listen
Für bestimmte Anwendungsfälle gibt es spezielle ARIA-Rollen:
| Rolle | Verwendung | Beispiel |
|---|---|---|
role="menu" |
Interaktive Menüs (mit Tastaturnavigation) | Dropdown-Menüs, Kontextmenüs |
role="menubar" |
Horizontale Menüleiste | Hauptnavigation mit Untermenüs |
role="tablist" |
Tab-Navigation | Tabs zum Umschalten von Inhalten |
role="listbox" |
Auswahllisten | Custom Select-Dropdowns |
Für einfache Navigationen reicht
<nav>
+
<ul>
völlig aus. Verwende ARIA-Rollen nur bei komplexen interaktiven Komponenten, die über
einfache Links hinausgehen.
Navigation als Liste
Navigationen werden fast immer als Listen umgesetzt - das ist semantisch korrekt und
barrierefrei. Das
<nav>
-Element kennzeichnet den Bereich als Navigation, die
<ul>
strukturiert die Links.
<nav aria-label="Hauptnavigation">
<ul class="nav-list" role="list">
<li><a href="/">Home</a></li>
<li><a href="/tutorials/">Tutorials</a></li>
<li><a href="/about/">Über uns</a></li>
<li><a href="/contact/">Kontakt</a></li>
</ul>
</nav>
.nav-list {
list-style: none;
padding: 0;
margin: 0;
display: flex;
gap: 1rem;
}
.nav-list a {
text-decoration: none;
padding: 0.5rem 1rem;
}
- Semantik: Eine Navigation ist eine Liste von Links
- Barrierefreiheit: Screenreader erkennen die Struktur und Anzahl der Menüpunkte
- Flexibilität: Einfach zu stylen mit CSS (horizontal, vertikal, Dropdowns)
- Verschachtelung: Untermenüs lassen sich natürlich als verschachtelte Listen abbilden
Horizontale Listen mit CSS
Listen werden standardmäßig vertikal dargestellt. Mit CSS kannst du sie aber einfach horizontal anordnen - perfekt für Navigationen, Social-Media-Icons oder Breadcrumbs.
Mit Flexbox (empfohlen)
Die modernste und flexibelste Methode:
ul.horizontal {
display: flex;
list-style: none;
padding: 0;
gap: 1rem;
}
- Home
- Tutorials
- Kontakt
Mit inline-block
Eine ältere, aber immer noch funktionierende Methode:
ul.inline-list {
list-style: none;
padding: 0;
}
ul.inline-list li {
display: inline-block;
margin-right: 1rem;
}
- Eins
- Zwei
- Drei
Verteilung mit Flexbox
Flexbox bietet verschiedene Möglichkeiten, die Elemente zu verteilen:
/* Gleichmäßig verteilt */
ul.spread {
display: flex;
justify-content: space-between;
}
/* Zentriert */
ul.centered {
display: flex;
justify-content: center;
gap: 2rem;
}
/* Am Ende ausgerichtet */
ul.end {
display: flex;
justify-content: flex-end;
gap: 1rem;
}
Verwende
gap
statt
margin
für Abstände zwischen Flex-Items. Das ist sauberer und du musst den letzten Abstand
nicht extra entfernen.
Teste es selbst
Wende das Gelernte direkt an - probiere den Code aus dem Tutorial aus oder experimentiere mit eigenen Ideen.
Editor öffnen
Mehr aus HTML
Tutorials werden geladen...