Laufende Nummern ohne Listen

Das Folgende richtet sich an Webdesigner, die sich mit HTML und CSS zumindest ganz pas­sa­bel auskennen. Wer seine Website mit einem WYSI­WYG-Editor oder gar MS-Word o. dergl. ge­staltet hat, kann damit jedoch nichts anfangen. Um nicht missver­standen zu werden: WYSI­WYG-Editoren und Word als HTML-Editor haben ihre Daseins­berechtigung, sind aber nicht halb so effizient und erzeugen nicht halb so schlanken Code wie reine HTML- und CSS-Editoren. Viele Optionen bleiben damit unerreichbar, z.B. auch diese:

Für fortlaufende Numerierungen in Websites werden gerne Listen ver­wendet, <ol> (ordered list, sortierte Liste mit Ordinalzahlen oder -buch­staben) bzw. <ul> (unordered list, unsortierte Liste mit Aufzäh­lungspunkten o.ä.). Das hat jedoch verschiedene Nachteile; z.B. werden alle Absätze nach <ol> oder <ul> eingerückt, was erst umständlich mit einer CSS-Eigenschaft wieder ent­fernt werden müsste, ebenso wie die Aufzählungszeichen. Außerdem ist

<ol>
<li>…</li>
<li>…</li>

</ol>

eine räumlich begrenzte Liste, wie sie vielleicht gar nicht gemeint ist. Man möchte evtl. nur Fußnoten oder Kapitel der Seite an beliebigen Stellen durchnumerieren. Es wäre fehler­trächtig, in­nerhalb dieser Liste viel weiteren HTML-Code unter­zubringen, der obendrein nur innerhalb der Liste wirksam wäre.

Das zu umgehen, bietet CSS eine Mög­lichkeit: counter (Zähler; w3­schools.com­/css/css_coun­ters.asp). Dort wird erklärt, wie ein Zähler erst mal aufgesetzt, also initialisiert wird. Ist das geschehen, genügt es, an beliebiger Stelle im HTML-Quelltext den Auslöser, im hiesigen Fall <z1></z1>, <z2></z2> oder <z3></z3> belie­big oft einzusetzen. Diese Trigger erhöhen jeweils ihren Zähler um 1 und zeigen ihn dann an.

Der Befehl dazu lautet immer einfach nur <z#></z#>2. Man darf also jederzeit an beliebiger Stelle der HTML-Datei <z#></z#>2 eingeben; die laufenden Nummern sortieren sich dann automatisch neu.

Nachteil: In diesem Text tragen einige Stellen einen Verweis auf eine von nur zwei Fußnoten. Verweise auf dieselbe Fußnote häufen sich also. Die hier be­schriebene Technik kann dies nicht lösen. Solche Wiederholungen ein und der­sel­ben Zahl müssen dann diskret einge­geben werden. Der Automa­tismus der Counter-Technik versagt hier.

lfdnr-fussn.htm1 ist die Beipieldatei, die diese Technik veranschaulichen soll.

Die beiden Zähler 1 (braun) und 2 (grün) sind per CSS so designt, dass sie sich zu einem Zähler-Doppel nach dem Muster 4.2, 2.5 o.ä. verknüpfen. Ein zu­sätzlicher Zähler nach dem Muster 3.1.5 scheint nicht möglich zu sein. Wenn eine solche dritte Listennr. nicht angestoßen wird, weil es keine dritte Ebene gibt, erscheint trotzdem als 3. Ord­nungs­zahl immer die 0, also z.B. 3.1.0, was nach den unge­schriebenen Regeln für wissen­schaftliche Texte nicht sein darf.

Zähler 3 (rot) folgt keiner Systematik und geistert an beliebiger Stelle durch den HTML-Code. Er dient hier als Fußnoten-Zähler. Deshalb wird er nach dem Text erneut aufgesetzt, damit die Fußnoten am Seitenende wieder mit 1 beginnen.

Auch was du soeben liest, hat Fußnoten, deren erstes Auftreten jeweils auf dieselbe Weise entstand. Da aber jedes weitere <z#>…<z#>2 die Zahl erhö­hen würde, sind Wiederholungen der­selben Ord­nungs­zahl auf diese Weise nicht machbar. Man muss hier von Hand die aktuelle Zahl diskret eintragen, wie weiter oben schon dargestellt.

Die Beispieldatei zeigt die Nume­rierung der Absätze und der Fuß­noten. Wie das geht, ist aus dem Quelltext er­sichtlich. Er wird mit Strg+U angezeigt. Er enthält zahl­reiche Kom­mentierungen, die hof­fent­lich die Logik des Procederes ver­deutlichen. Dabei sind folgende <style>-Anga­ben notwendig:

Container für den Zähler, Initia­lisierung der Zähl­variablen:
Zähler {counter-reset: Zähl­vari­able}
Trigger zum Anzeigen der lfd. Nr.:
Anzeige {… (evtl. Style-Ei­gen­schaften)}
Vor der Anzeige Zähler um 1 erhöhen, dann den Inhalt der Anzeige vorgeben – hier nur die lfd. Nr., sonst nichts:
Anzeige::before {counter-in­cre­ment: Zählva­riable; con­tent: coun­ter­(Zählva­riable)}

Im Textkörper (<body>) Sind zwei Angaben erforderlich:
<Zähler> (Initialisiert den Zähler, worauf die CSS-Angaben bisher nur vorbereitet haben.)
<Anzeige></Anzeige> (Zeigt die aktu­elle lfd. Nr. an, die sich mit jeder Wiederholung um 1 erhöht. Dieser Anzeigebefehl heißt in der Bei­spieldatei lfdnr-fussn.htm1 <z#> </z#>2.)

Warum noch einmal erklären, was schon in w3schools­.com/css/css_­coun­ters.asp1 steht? Weil dieser Artikel alles andere als selbst­erklärend ist und unter diesem Link gewöhnliche HTML-Tags für diese Zwecke verbogen werden, die dann für andere Verwendungen evtl. nicht mehr vollum­fänglich zur Verfügung stehen. Die hier vorgestellte Lösung verwendet aus­schließlich benutzer­definierte Tags, die anderweitig keine Verwendung finden. Außerdem ist die schema­tisierte Be­nennung der Variablen und ihrer Tags (zaehler# (Zähler), zaehl# (Zähl­variable), z# (Anzeige) geeignet, an beliebige andere Na­mens­gebungen angepasst zu werden.

Beim Ausprobieren stellte sich heraus, dass einige gängige Browser feh­lertolerant genug sind, um sich zum Hochzählen und Anzeigen eines Zählers mit (z.B.) <z#>2 zufrieden­zugeben. Das abschließende </z#>2 kann entfallen. Es wäre jedoch töricht, sich darauf zu verlassen. Es wird empfohlen, immer die Kombination <z#></z#>2 zu ver­wenden, weil dies mit restlos allen Browsern klappt.

Die Beispieldatei eignet sich gut für einen Download (Rechtsklick auf den Dateinamen, dann Linksklick auf Seite speichern unter …. So kann diese Technik offline belauert und im­mer wieder befragt werden. Sie ist mit ihren For­matierungen usw. unabhängig von den Vorgaben dieser Website, also auf neudeutsch stand alone oder portable.

Wie auch <ol> und <ul> kann counter nur auf einer Seite bzw. in einer HTML-Datei wirksam sein. Es ist nicht möglich, eine Zählung in einer Nachfolgedatei fortzusetzen: Datei 1 mit Kapitel 1-4, Datei 2 mit Kapitel 5-7, das geht nicht.

Sollte es in sehr seltenen Fällen doch mal erforderlich sein, dann hilft diese Krücke:

<p style="visibility: invisible">
<!-- Zähler unsichtbar auf 2 vorstellen, so dass die erste angezeigte Zahl 3 ist: -->
<z#></z#> <z#></z#> 
</p>

Weiter mit der Beispieldatei lfdnr-fussn.htm1

_________________

Lange Zeichenketten, z.B. Links, unterliegen wie der ganze Text ebenfalls der Silbentrennung, obwohl der Trennstrich nicht zum Link gehört. Also bitte direkt anklicken, nicht die Adresse inkl. Trennstrich kopieren und im Browser einfügen. Hat der Webdesigner jedoch gar keine Silbentrennung veranlasst, ist diese Überlegung natürlich obsolet. Aber was ist das dann für ein Webdesigner?

Das #-Symbol bedeutet eine Zahl, hier die momentan aktuelle lfd. Nr.