2016-07-11 123 views
1

我想選擇既沒有.test也沒有.test1類的元素。 以下將無法使用。CSS:不會按預期工作

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>

回答

3

這是預期爲每MDN

「的否定CSS僞類,:未(X),是一種功能性表示法服用簡單選擇X作爲參數。「

不幸的是你在沒有簡單選擇。

一個簡單的選擇器的CSS Spec定義是:

...由一個特定的方面匹配的元件。類型選擇器,通用選擇器,屬性選擇器,類選擇器,ID選擇器或僞類是一個簡單的選擇器。

不幸的是,你是一個複合選擇,因爲它有類。

@Rounin在這裏有最佳的解決方案。以上只是解釋你爲什麼選擇失敗。

+0

謝謝,我明白了。 看來,選擇器是不同的執行jquery和css,cos以下工作爲jquery http://jsfiddle.net/pkUy2/47/和不適用於css – Doodles

1

這應該工作:

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

但是如果一個li只有test或只有test1作爲類會怎麼樣? –

+0

確實 - https://jsfiddle.net/u5xd2dw7/ –

+0

@Ron Deijkers,@Paulie_D:謝謝你指出。我的回答是錯誤的。 'ul li:不((。測試):not(.test1)'是正確的答案,有人已經做到了,現在我無法在這篇文章中找到它。 – Kan412

4

很多時候,當你發現自己在你需要使用:not的情況下,會有再一個更優雅的方式 - 寫入您的款式,部署正面而不是負面定位。

例如,而不是針對所有這.test.test1,並給予它color:rgb(255,0,0),爲什麼不:

  • 顏色一切color:rgb(255,0,0);然後
  • 積極目標.test.test1,重新着色它color:rgb(0,0,0)

這樣,你趁級聯的,在正是它應該工作的方式。

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

積極思考永遠是最好的方式! –