CSS Wählen Sie eine Kette von unmittelbaren Geschwister

8

Ich habe ein Projekt, bei dem ich keinerlei Kontrolle über das Markup habe. Ich suche nach einer Möglichkeit, jede Instanz von 'class2' auszuwählen, die sofort einer Instanz von 'class1' folgt. Die folgende Strategie funktioniert, aber in einigen Fällen gibt es mehr als 20 Instanzen von 'class2' in einer Reihe und ich würde es vorziehen, diese große Unordnung in meinem Code zu vermeiden.

%Vor%

... um folgendes zu gestalten

%Vor%     
Andy Mangold 18.01.2013, 21:36
quelle

4 Antworten

4

Hier ist ein Stich im Dunkeln mit dem neuen :not Selektor @spudley vorgeschlagen. Es sieht so aus, als ob es in Ordnung ist: Ссылка . Ich hoffe, die Syntax ist richtig. Bearbeitungen sind willkommen.

Und das meiste davon stammt aus @ Mookamafoobs Lösung. Ich habe keine Bearbeitung gesendet, wenn @mookamafoob der Verwendung des :not Selektors vorzeitig widersprochen hat.

Ссылка

%Vor%

Bearbeiten: Entschuldigung für die fehlende Erklärung. Der letzte Teil versucht, jedes Element auszuwählen, das ein Geschwister von .class1 ist, das nicht .class2 hat, und setzt alle nachfolgenden Geschwister mit .class2 auf ihren ursprünglichen Zustand zurück. Das kann ziemlich verrückt sein, abhängig davon, wie viele Stile Sie anwenden.

    
Tracy Fu 18.01.2013, 21:38
quelle
3

Mein Vorschlag wäre, einfach den Stil für .class1 ~ .class2 festzulegen und ihn dann wieder auf den vorherigen Wert für p ~ .class2 zu setzen.

Es ist keine perfekte Lösung, weil der zweite Selektor dort nicht wissen kann, worauf er zurückgreift; Sie müssen es nur so einstellen, wie Sie es erwarten. Aber es sollte machbar sein.

Eine andere Idee, die ich hatte, war die Verwendung des Selektors CSS not .

Damit können Sie zum leichteren ~ wechseln, um die Gruppe aller relevanten class2 -Elemente auszuwählen, aber not und ~ , um diejenigen herauszufiltern, die dem <p> -Tag folgen.

zB:

%Vor%

Leider glaube ich nicht, dass diese Idee wie gezeigt funktionieren wird; Die Verwendung von ~ macht hier einige Kombinationen, die wir nicht wollen, die unabhängig von not ausgewählt werden. Es kann möglich sein, einen not Selektor zu finden, der funktioniert, aber ich habe es nicht geschafft, es in der Zeit zu entwickeln, die ich jetzt ausgegeben habe.

    
Spudley 18.01.2013 22:39
quelle
3

Der allgemeine Geschwisterkombinator könnte erhalten, was Sie brauchen. Es würde so aussehen:

%Vor%

Sie finden weitere Informationen hier .

Hier ist auch ein Beispiel Ссылка

BEARBEITEN

Das funktioniert möglicherweise für Ihren Fall und verwendet dabei zwei Regeln:

%Vor%     
gotohales 18.01.2013 21:39
quelle
0

Vielleicht musst du die Logik umdrehen? Können Sie eine Regel für eine .class2 schreiben, die einer .class1 oder einer .class2 folgt, die einer .class2 folgt?

%Vor%

Diese Regel würde in Ihrem Beispiel nicht auf das letzte div angewendet, da es keinem folgt.

    
Sean Redmond 18.01.2013 21:57
quelle

Tags und Links