Quantcast
Channel: SELFHTML-Forum
Viewing all articles
Browse latest Browse all 746

Greedyness von Kombinatoren

$
0
0

Hallo alle,

in MBs Frage zu seinen Kommentarblöcken ist mir etwas aufgefallen.

Gegeben sei dieses HTML (jaaaa - da fehlen Attribute, es ist Dummy-Markup)

<a>a1a><b>b1b><a>a2a><b>b2b><a>a3a><b>b3b><a>a4a><b>b4b><a>a5a><b>b5b>

Und diese Regeln:

b{color: green;}a:active ~ b{color: blue;}a:active ~ b ~ a ~ b{color: red;}

Ohne Klick sind alle b-Elemente grün. Klicke ich auf ein a-Element, wird das darauf folgende b-Element blau und alle weiteren rot.

ABER

Das müsste ja nicht so sein. Die zweite Regel matcht jedes b hinter einem a:active-Element. Die Existenz eines weiteren a Elementes ist für CSS also kein Grund, mit der Suche nach b Elementen aufzuhören. Das Matching ist greedy.

Wer sagt dem Browser, dass die dritte Regel non-greedy zu sein hat und das erste gefundene a hinter dem :active a matchen muss? CSS könnte ja auch wie in Regel 2 greedy vorgehen und solange b Elemente matchen, bis es nicht mehr anders geht, und dann das letzte a matchen.

Aus Performancegründen ist die non-greedy Logik vermutlich vorzuziehen, denn ein greedy-Verhalten setzt regexiges Backtracking voraus. Aber ich will nicht spekulieren. Weiß jemand, ob und wo dieses Verhalten spezifiziert ist? In CSS-Selectors 4 scheint das nicht zu stehen.

Rolf

--
sumpsi - posui - obstruxi

Viewing all articles
Browse latest Browse all 746