mitmario.dev

CSS Zähler

CSS Zähler ermöglichen automatische Nummerierung ohne HTML-Listen. Mit counter-reset erzeugst du einen Zähler, mit counter-increment zählst du ihn hoch, und mit den Funktionen counter() und counters() gibst du den Wert über die content-Eigenschaft aus. So kannst du Überschriften, Abschnitte, Schritte oder beliebige Elemente durchnummerieren, ohne die Nummern manuell im HTML zu pflegen. Besonders mächtig wird es mit counters() für verschachtelte Nummerierungen wie 1.1, 1.2, 2.1.

Steckbrief counter
Syntax
counter-reset: <name> <integer>?
Initialwert
none
Vererbt
Nein
Animierbar
Nein
Kategorie
Listen & Tabellen
Werte
11
Beispiele
9
Browser
5 von 5
E-Mail
2 von 5
Stand
15.02.2026

Grundlagen

CSS Zähler bestehen aus drei Teilen, die zusammenspielen:

  1. counter-reset erstellt einen neuen Zähler und setzt ihn auf einen Startwert (Standard: 0). Du setzt counter-reset auf das Elternelement, das den Zählbereich definiert.
  2. counter-increment erhöht den Zähler um einen Wert (Standard: 1). Du setzt es auf die Elemente, die gezählt werden sollen.
  3. counter() / counters() sind Funktionen, die du in content verwendest, um den aktuellen Zählerwert auszugeben. counter() gibt einen einzelnen Wert aus, counters() sammelt alle verschachtelten Instanzen desselben Zählers mit einem Trennzeichen.

Ein typisches Beispiel: Du setzt counter-reset: section auf den <body>, counter-increment: section auf jedes <h2>, und content: counter(section) ". " auf h2::before. Schon werden alle <h2> automatisch durchnummeriert, und die Nummern aktualisieren sich automatisch, wenn du einen Abschnitt hinzufügst, entfernst oder umstellst.

Syntax & Werte

11 Werte

counter-reset

Wert Beschreibung Beispiel
none Kein Zähler wird erstellt oder zurückgesetzt (Standard). counter-reset: none
<name> Erstellt den Zähler mit dem Startwert 0. counter-reset: section
<name> <integer> Erstellt den Zähler mit einem bestimmten Startwert. counter-reset: section 5
<name1> <name2> Mehrere Zähler gleichzeitig erstellen. counter-reset: section step

counter-increment

Wert Beschreibung Beispiel
none Kein Zähler wird erhöht (Standard). counter-increment: none
<name> Erhöht den Zähler um 1. counter-increment: section
<name> <integer> Erhöht den Zähler um den angegebenen Wert. Negative Werte zählen rückwärts. counter-increment: section 2

counter() und counters()

Wert Beschreibung Beispiel
counter(name) Gibt den aktuellen Wert des Zählers als Dezimalzahl aus. content: counter(section)
counter(name, style) Gibt den Wert im angegebenen Zählstil aus (z.B. upper-roman, lower-alpha). content: counter(section, upper-roman)
counters(name, string) Sammelt alle verschachtelten Instanzen des Zählers mit einem Trennzeichen. content: counters(section, ".")
counters(name, string, style) Verschachtelte Zähler mit Trennzeichen und Zählstil. content: counters(section, ".", upper-roman)

Beispiele

9 Beispiele

Überschriften automatisch durchnummerieren, ohne die Nummern im HTML zu schreiben.

Automatische Abschnittsnummern
body {
  counter-reset: abschnitt;
}

h2 {
  counter-increment: abschnitt;
}

h2::before {
  content: counter(abschnitt) ". ";
  color: #3b82f6;
}

Barrierefreiheit

Inhalte, die über ::before und content generiert werden, erscheinen nicht im DOM und sind für manche assistive Technologien nicht zugänglich. Screenreader lesen content-Text zwar inzwischen meist vor, aber das Verhalten ist nicht einheitlich. Verlasse dich daher nicht darauf, dass die generierten Nummern von allen Nutzern wahrgenommen werden.

Wenn die Nummerierung semantische Bedeutung hat (z.B. eine geordnete Reihenfolge), verwende <ol> statt CSS-Counter. <ol> vermittelt die Reihenfolge semantisch korrekt an Screenreader, während CSS-Counter rein visuell sind. CSS Zähler eignen sich besser für dekorative Nummerierungen, bei denen die Nummer eine optische Ergänzung ist, aber kein essentieller Inhalt.

Für Dokumentstrukturen wie Kapitel- und Abschnittsnummern sollte die Hierarchie über eine korrekte Heading-Struktur (<h1> bis <h6>) vermittelt werden, nicht allein über CSS-Counter. Die Counter-Nummern sind dann eine visuelle Hilfe, aber die eigentliche Struktur kommt aus dem HTML.

Häufige Fehler

5 Fehler
01 counter-reset auf dem falschen Element
counter-reset muss auf dem Elternelement stehen, nicht auf dem Element, das gezählt wird. Setzt du counter-reset auf h2, wird der Zähler bei jedem <h2> zurückgesetzt, statt hochzuzählen.
02 counter-increment ohne counter-reset
Ohne counter-reset existiert der Zähler nicht. Der Browser erzeugt dann implizit einen Zähler, aber das Verhalten ist unzuverlässig und schwer nachzuvollziehen.
03 counter() außerhalb von content verwenden
counter() und counters() funktionieren nur innerhalb der content-Eigenschaft auf ::before oder ::after. Du kannst sie nicht direkt in Eigenschaften wie width oder color verwenden.
04 Verschachtelte Zähler ohne counter-reset pro Ebene
Bei verschachtelten Listen muss jede <ol> oder <ul> den Zähler zurücksetzen, damit jede Ebene ihren eigenen Zähler bekommt. Ohne das zählen alle Ebenen denselben Zähler weiter.
05 Reihenfolge von Increment und Content verwechseln
counter-increment wird angewendet, bevor content ausgewertet wird. Der Zähler zeigt also den bereits erhöhten Wert an. Wenn du bei 1 starten willst, setze counter-reset: name 0 (Standard), nicht counter-reset: name 1.

Browser-Kompatibilität

5 von 5

CSS Counter (counter-reset, counter-increment, counter(), counters()) werden seit über 20 Jahren von allen Browsern vollständig unterstützt.

  • Chrome

    Komplett

  • Firefox

    Komplett

  • Safari

    Komplett

  • Edge

    Komplett

  • Opera

    Komplett

Email-Kompatibilität

2 von 5

CSS Counter werden von den meisten Email-Clients nicht unterstützt, da ::before/::after und content in Emails stark eingeschränkt sind.

  • Apple Mail

    Komplett

  • Gmail

    Keine

    content und ::before/::after werden entfernt

  • Outlook

    Keine

    Kein Support für Pseudo-Elemente oder content

  • Thunderbird

    Komplett

  • Yahoo Mail

    Keine

    Pseudo-Elemente werden nicht unterstützt

Newsletter

einmal die Woche, kostenlos

Neue Artikel und Videos, was sich auf der Lernplattform tut, und ab und zu ein Sonderpreis zum Kursstart. Kurz genug, dass du es auch liest.

Zuletzt verschickt · KW 40

Einmal alles neu, und die Lernplattform ist da

Danach kommt eine Mail mit Bestätigungslink, erst dann bist du eingetragen. Abmelden geht unten in jeder Ausgabe. Mehr dazu in der Datenschutzerklärung.