Wählen Sie das n-te folgende Geschwister

8

Ich habe mich gefragt, ob es eine bessere Lösung als das gibt, was ich gefunden habe, ohne die HTML-Struktur zu ändern

Die HTML-Struktur sieht so aus

%Vor%

Es gibt also verschiedene DIVs auf derselben Ebene. Ich möchte jeden vierten Block anders färben, bis ein Teiler erscheint, dann müsste er neu erzählen.

Ich dachte, etwas wie .block:nth-child(4n) würde den Trick machen, aber es zählt tatsächlich die Elemente basierend auf dem Elternteil, nicht basierend auf der Klasse.

Hier ist das JSFiddle zum ausprobieren. Block # 4 und # 8 in jeder Zeile sollten unterschiedlich gefärbt sein Ссылка

Und so habe ich es zu einer Art Arbeit gemacht: Ссылка

Was ich getan habe, war, nach dem vierten Geschwister des .divider wie diesem .divider + .block + .block + .block + .block

zu suchen

Es funktioniert, aber ich müsste das gleiche für den 8., 12., 16., .. Block schreiben, was es nicht mehr automatisch macht.

Gibt es etwas wie .divider + .block:nth-sibling(4) oder .divider + .block:nth-of-class(4) ?

Vielleicht hat einer von euch eine Idee, wie man das löst, ohne den Quellcode zu ändern oder Javascript zu benutzen.

    
user828591 03.04.2013, 14:31
quelle

3 Antworten

11

Eine solche Pseudo-Klasse würde nicht funktionieren, weil Sie es erwarten Elemente relativ zu einer anderen Verbindung Wähler zu entsprechen, was nicht ist, wie einfach Selektoren arbeiten. Wenn Sie beispielsweise einen komplexen Selektor geschrieben haben, der nur einen einzigen zusammengesetzten Selektor mit dieser Pseudo-Klasse (und keine Geschwister-Kombinatoren) enthält:

%Vor%

Würdest du erwarten, dass dies .block:nth-child(4n) entspricht, überhaupt nicht übereinstimmt oder ungültig ist?

Es wäre schön, + .block + .block + .block + .block abkürzen zu können und es irgendwie zu wiederholen, aber leider ist es aufgrund der Konstruktion der Selektorsyntax einfach nicht möglich.

Sie müssen stattdessen JavaScript verwenden und / oder zusätzliche Klassen zu den entsprechenden Elementen hinzufügen.

    
BoltClock 03.04.2013, 14:34
quelle
1

Das Problem hierbei ist, dass sich :nth-of-type auf den Typ des Elements bezieht und sowohl .divider als auch .block Elemente des Typs <div> sind.

Was Sie wirklich brauchen, ist, dass .divider ein anderer Elementtyp ist als .block .

Auf dieser Basis, wenn die einzigen zwei untergeordneten Elemente von <div class="wrap"> sind:

  1. <div class="divider">
  2. <div class="block">

Ich wäre versucht, <div class="divider"> für <hr> - das thematische Break Element zu tauschen.

Dann können Sie verwenden:

%Vor%

zum Stil .block .

    
Rounin 06.02.2017 14:28
quelle
0

Wie von BoltClock erklärt, können Sie dies nicht ohne JavaScript tun. Wenn Sie diese Route wählen (obwohl Sie ohne JavaScript explizit sagen), kann dies mit jQuery wie folgt geschehen:

%Vor%

Damit wird die 4. Spalte in jeder Zeile gelb eingefärbt.

    
kba 03.04.2013 14:48
quelle

Tags und Links