2009-08-09 15 views
9

Mögliche Duplizieren:
Is there a CSS parent selector?CSS Eltern-/Vorfahr Selector

Ich weiß, dass dies ein Schuss im Dunkeln, aber ist es eine Möglichkeit, mit CSS nur, CSS2, kein jquery , kein JavaScript, um den Vorfahren eines Elements auszuwählen und zu stylen? Ich habe die Selektoren durchgesehen, aber ich poste dies für den Fall, dass ich etwas verpasst habe, oder es gibt einen cleveren Workaround.

Zum Beispiel sagen, ich habe eine Tabelle mit dem Klassennamen "test" in einem div geschachtelt. Gibt es irgendeine Art von:

<div> 
    <table class="test"> 
    </table> 
</div> 
div (with child) .test 
{ 
    /*styling, for div, not .test ...*/ 
} 
+0

Gibt es ein Problem mit dem Hinzufügen einer Klasse zum enthaltenen div? – rossipedia

Antwort

9

Es gibt nicht so etwas wie Eltern Wähler in CSS2 oder CSS3. Und es wird vielleicht nie wirklich sein, weil der ganze "Cascading" -Teil von CSS nicht schön sein wird, wenn man anfängt, Elternselektoren zu machen.

Das ist, was jQuery für :-) ist

+8

jQuery und JavaScript im Allgemeinen ist zum Hinzufügen von Benutzeroberflächenfunktionalität; nicht zum Festlegen eines Stils. jQuery und JavaScript werden aufgrund der CSS-Unzulänglichkeiten verwendet, sind jedoch nicht für diesen Zweck gedacht. – Scharrels

+10

Zuerst gibt es einen Smiley nach diesem Satz. Zweitens stimme ich nicht zu. Wäre es besser, alle Präsentationsaspekte über CSS spezifizieren zu können? Na sicher. Ist es möglich? Nein. JQuery ist ein brillantes Tool, mit dem Sie die Benutzererfahrung bereichern können - und wenn dies einen Stil enthält, der sonst nicht einheitlich festgelegt werden kann, dann werde ich genau das tun. – ChssPly76

+2

-1 für jQuery wo OP einfach auf Vanille JS zurückgreifen konnte. – PeeHaa

6

In CSS gibt es ein: nicht Selektor: leer Wähler, die Sie leere Elemente passen können, können Sie den Effekt mit negieren.

div:not(:empty) { 
    // your styles here 
} 

Ich bin mir jedoch nicht sicher, ob alle Browser dies unterstützen.

2
div:not(:empty) { 
    margin:0; 
} 

von http://jigsaw.w3.org/css-validator/ als CSS2 nicht erkannt wird

es ist der Zweck von CSS „Kaskade“ nach unten von der mehr auf die spezifischeren Elemente enthält. Ich denke, es möglich ist, für Sie „Ihre Logik zu umkehren“, wie in

div.myclass { /* format parent */ } 
div.myclass * { /* neutralize formats in descendants */} 
div.myclass img { /* more specific formats for img children */ } 

Glück Mike

+0

Das Format kann nicht variieren, je nachdem, welche Nachkommen es hat, was das OP verlangt. – ChrisW