MudGuard: Greedyness von Kombinatoren

Beitrag lesen

Hi,

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

<a>a1</a> <b>b1</b> 
<a>a2</a> <b>b2</b> 
<a>a3</a> <b>b3</b> 
<a>a4</a> <b>b4</b> 
<a>a5</a> <b>b5</b> 

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.

es gibt doch so verschiedene nth-of- Pseudoklassen - helfen die vielleicht?

cu,
Andreas a/k/a MudGuard