2016-07-11 14 views
1

Ich möchte Elemente auswählen, die nicht beide Klassen .test und .test1 haben. Folgendes funktioniert nicht.CSS: funktioniert nicht wie erwartet

ul li:not(.test.test1) 
 
{ 
 
    color:red; 
 
}
<ul> 
 
    <li class="test test1">one..</li> 
 
    <li class="two">two</li> 
 
    <li class="three">three</li> 
 
</ul>

Antwort

3

Dies wird erwartet, da pro MDN

„die Negation CSS pseudo-Klasse: nicht (X), ist eine funktionale Notation ein einfaches Selektor unter X als Argument. "

Leider Sie in nicht einen einfachen Selektor.

CSS Spec Die Definition eines einfachen Selektor ist:

... ein von einem besonderen Aspekte abgestimmt Element. Ein Typselektor, ein universeller Selektor, ein Attributselektor, ein Klassenselektor, ein ID-Selektor oder eine Pseudo-Klasse ist ein einfacher Selektor.

Leider ist Ihr ist eine Verbindung Selektor wie es zwei Klassen hat.

@Rounin hat hier die optimale Lösung. Das obige ist nur eine Erklärung dafür, warum Ihr Selektor fehlschlägt.

+0

Danke, ich habe es verstanden. Es scheint, dass Selektoren für jquery und css anders ausgeführt werden, cos folgt funktioniert für jquery http://jsfiddle.net/pkUy2/47/ und funktioniert nicht für CSS – Doodles

1

Diese Arbeit sollte:

ul li:not(.test),ul li:not(.test1) 
{ 
    color:red; 
} 
+2

Aber was, wenn ein li nur test oder nur test1 als klasse hat? –

+0

In der Tat - https://jsfiddle.net/u5xd2dw7/ –

+0

@Ron Deijkers, @Paulie_D: Danke für das Aufzeigen. Meine Antwort ist falsch. 'ul li: nicht (.test): nicht (.test1) 'ist die richtige Antwort und jemand hat es bereits getan und ich kann es jetzt in diesem Beitrag nicht finden. – Kan412

4

Oft, wenn man sich in einer Situation, wo Sie :not verwenden müssen, wird es eine elegantere Weg, um wieder -Schreiben Sie Ihre Stile, Bereitstellung positive anstatt negative Targeting.

Zum Beispiel, anstatt alles Targeting die ist nicht.test.test1 und es color:rgb(255,0,0) geben, warum nicht:

  • Farbe allescolor:rgb(255,0,0); und dann
  • Positively .test.test1 Ziel, wieder Färbung es color:rgb(0,0,0)

Auf diese Weise können die Vorteile der Kaskade nehmen, genau in der Weise, dass es funktionieren soll.

li { 
 
color: rgb(255,0,0); 
 
} 
 

 
li.test.test1 { 
 
color: rgb(0,0,0); 
 
}
<ul> 
 
    <li class="test test1">one..</li> 
 
    <li class="two">two</li> 
 
    <li class="three">three</li> 
 
</ul>

+1

Positiv zu denken ist immer der beste Weg! –

Verwandte Themen