Zum Hauptinhalt springen
Mehrere Tags nehmen eine Zahl in Klammern entgegen und zählen damit reihum, typischerweise für abwechselnde Zeilenfarben in einer Tabelle. Dahinter steckt eine Modulo-Rechnung, die in einem Punkt von der mathematischen Regel abweicht. Wer das nicht weiß, vergibt die falschen Klassennamen im Stylesheet.

Modulo im mathematischen Sinn

Modulo liefert den Rest einer Division zweier ganzer Zahlen. Das Ergebnis der Division selbst wird verworfen. Der Wertebereich liegt damit zwischen 0 und der um eins verminderten Zahl, bei Divisor 3 also zwischen 0 und 2.

Die Abweichung in WEBSALE V8s

Für einen Zähler ist die Null unpraktisch. Beim ersten Durchlauf einer Schleife soll eine 1 herauskommen und nicht eine 0, und ein Klassenname zeile0 liest sich schlechter als zeile1. Deshalb gilt in WEBSALE V8s: Wäre das Ergebnis null, wird stattdessen der Divisor ausgegeben.
Dabei ist x der interne Zähler, der bei jeder Ausführung des Tags um eins steigt, und n die Zahl in der Klammer. Gleichwertig und oft bequemer zu lesen ist die geschlossene Form ((x − 1) mod n) + 1. Beide Schreibweisen liefern dieselben Werte.

Was dabei herauskommt

Bei einem Divisor von 3 ergibt sich diese Folge:
Der Wertebereich liegt damit immer zwischen 1 und n, beide eingeschlossen. Eine 0 kommt nie vor.Wenn Sie also mit ~PR-Position(2)~ abwechselnde Zeilenfarben erzeugen, heißen die Klassen …1 und …2, nicht …0 und …1. Legen Sie Ihr Stylesheet entsprechend an.
Ein Zähler, der noch bei null steht, liefert bei einem Divisor von 3 ebenfalls eine 3, weil 0 mod 3 null ergibt und damit die Ersetzung greift. Das fällt in einer Schleife nicht auf, weil dort beim ersten Durchlauf bereits hochgezählt wurde. Es kann aber auffallen, wenn Sie einen Zähler vor dem ersten Erhöhen auslesen.

Ein Beispiel

Abwechselnde Zeilenfarben in einer Produktliste:
Für reine Zebrastreifen braucht es das Tag heute nicht mehr, dafür genügt tr:nth-child(even) im Stylesheet. Sinnvoll bleibt der Zähler dort, wo die Zahl selbst gebraucht wird, beispielsweise um nach jedem dritten Eintrag eine Spalte umzubrechen.

Welche Tags so rechnen

Diese abgewandelte Modulo-Rechnung greift bei allen Tags, die eine Zahl als Klammerzusatz entgegennehmen und damit einen Zähler ausgeben. Dazu gehören unter anderem:
Die Liste ist nicht abschließend. Prüfen Sie im Zweifel in der Referenz des jeweiligen Tags, ob der Klammerzusatz als Divisor gemeint ist. Ein Klammerzusatz kann je nach Tag auch etwas ganz anderes bedeuten, beispielsweise die Zahl der Nachkommastellen.
PR-Position() kennt zusätzlich eine Form mit zwei Zahlen. Dann arbeitet das Tag nicht als Einzel-Tag, sondern als Klammerung, und greift, wenn das Ergebnis der Modulo-Rechnung der zweiten Zahl entspricht. So geben Sie beispielsweise nur bei jedem dritten Produkt etwas aus. Referenz: PR-Position() · BASKET-PR-Position() · WS-CounterInc() · WS-Counter2Inc() · DC-Int1…3_mod()