2017-04-14 8 views
3

Dieser ist trippy. Ich lehne es ist zu denken unmöglich :-(CSS Auswahl Geschwister eines Elements mit einem bestimmten Unterelement?

Jede Idee geschätzt.

Das Snippet unten ein Teil einer viel größeren Struktur mit vielen .step Elementen ist.

Ich brauche alle .stepText Elemente passen das sind neben .stepTitleAndImages ul.standard

Mit anderen Worten, entsprechen alle .stepText Elemente, die .step Eltern haben, die .stepTitleAndImages Kind hat, das .stepImages.standard Kind

hat
<div class="step"> 
    <div class="stepTitleAndImages"> 
    <h3 class="stepTitle"></h3> 
    <ul class="stepImages standard"></ul> 
    <div class="clearer"></div> 
    </div> 
    <div class="stepText "></div> **HOW TO SELECT ALL ELEMENTS LIKE THIS ONE?** 
    <div class="clearer"></div> 
</div> 

<div class="step"> 
    <div class="stepTitleAndImages"> 
    <h3 class="stepTitle"></h3> 
    <ul class="stepImages medium"></ul> 
    <div class="clearer"></div> 
    </div> 
    <div class="stepText "></div> 
    <div class="clearer"></div> 
</div> 

PS: Ich kann den HTML nicht ändern. Kann nichts anderes als reines CSS verwenden.

Antwort

1

Diese kann nicht mit Ihrer HTML-Struktur und mit reinem CSS erfolgen. Die nächste Lösung für Ihr Problem, die HTML-Struktur und mit reinem CSS zu ändern, wäre die standard Klasse zu seinem übergeordneten Tag zu verschieben:

<div class="stepTitleAndImages standard"> <h3 class="stepTitle"></h3> <ul class="stepImages"></ul> <div class="clearer"></div> </div>

Dies würde ermöglicht es Ihnen, die adjacent sibling selector (+) zu verwenden, die Spiele der zweite Selektor, wenn er das direkte nächste Geschwister der ersten, wie dies ist:

.stepTitleAndImages.standard + .stepText { /* Styles */ }

Ein flexiblerer Ansatz wäre die Verwendung der general sibling selector die würde passen die durch den ersten Selektor voran Geschwister, nicht nur die direkten nächsten:

.stepTitleAndImages.standard ~ .stepText { /* Styles */ }

Die :has Pseudoklasse is in development by Mozilla, aber es hat noch keinen stabilen Browser nicht getroffen hat. Mit ihm und mit Ihrem HTML-Struktur, könnten Sie gehen:

.stepTitleAndImages:has(.standard) + .stepText { /* Styles */ }

Leider zur Zeit Sie dies mit CSS auf andere Weise nicht lösen können (und mit Ihrem HTML-Struktur) nur.

+1

Danke für eine ausführliche Antwort Fausto NA. Leider gestalte ich hier (extern) ein externes System; keine Kontrolle über den HTML-Code. – CarvedBlock

+0

Danke! Betrachten Sie upvoting, jetzt haben Sie genug Punkte :) –

3

das Verwenden Sie einfach für den ersten Fall der Auswahl

.step:nth-child(1) .stepText { 
... Your CSS here 
} 

Für zweite Einsatz

.step:nth-child(2) .stepText { 
... Your CSS here 
} 

beide verwenden Zur Auswahl

.step .stepText { 
... Your CSS here 
} 

Dann sollten Sie jquery benötigen für diese

Auswählen von Eltern Geschwister ist nicht möglich, nur mit reinem CSS noch, du durch eine einzige Linie von jquery erreichen kann:

$('ul.standard').parent().siblings(".stepText").css(...your CSS here); 
+0

Danke dir vkubre! Aber ich fürchte, ich habe mich nicht klar ausgedrückt.Nicht deine Schuld. Der Deal besteht darin, alle Elemente auszuwählen, die diesem Muster entsprechen und über die Quelle verstreut sind. Ich sehe nicht, wie Nth-Kind das tun könnte. Ich habe die Frage bearbeitet, um den wahren Zustand widerzuspiegeln. – CarvedBlock

+0

Auswählen von Eltern Geschwister ist nicht möglich nur mit reinem CSS, Sie erreichen dies durch eine einzige Zeile von jquery: ** $ ('ul.standard'). Parent(). Geschwister (". StepText"). Css ('background', '# f55'); ** Wenn Sie jedoch das Muster von .standard oder .medium Klassen genau dann kennen: nth-chlid (_ihre Musterformel here_) dann können Sie dies mit reinem CSS erreichen – vkubre

+0

Danke nochmal @ vkubre. Dies macht dieses spezifische Projekt unmöglich. Prost. – CarvedBlock

Verwandte Themen