2012-03-05 96 views
3

我需要樣式(僅限CSS)最後一個子元素,同時排除具有特定類的元素。是否有可能鏈接:不()然後:最後一個孩子?

例如,我想樣式

<ul> 
    <li>Bar</li> 
    <li>Bar</li> 
    <li>Bar</li> 
    <li>Should have a green background</li> 
    <li class='foo'>Bar</li> 
</ul> 

無類「富」最後一里應該是綠色的。我試圖

li:not(.foo):last-child { 
    background-color: green; 
}​ 

li:not(.foo):last-of-type { 
    background-color: green; 
}​ 

但它沒有工作。

http://jsfiddle.net/gentooboontoo/V7rab/2/

+0

使用最後一個孩子本身會引起跨瀏覽器問題..你最好使用''''你想要''li'元素..' – 2012-03-05 11:29:47

+1

這很奇怪,爲什麼人們用一個CSS3選擇器的問題,忘掉休息。如果瀏覽器不支持一個CSS3僞類(':last-child'),則不太可能支持其他任何(':not()'和':last-of-type')。 – BoltClock 2012-03-05 16:52:43

回答

5

我不認爲這會工作(這是行不通的,但我不認爲它應該反正工作)

選擇器工作正常,但第二-to-最後li永遠不會成爲:last-child,因爲它不是最後一個孩子......

它不像jQuery的not()方法實際上將刪除選擇指定的元素。 CSS :not選擇器/過濾器將忽略該元素,但不會將其從頁面中刪除。

+1

好,簡潔的答案。下面是另一個解釋:http://stackoverflow.com/a/5217102/106224 – BoltClock 2012-03-05 16:45:51

0

應用'last-child'會導致瀏覽器問題。所以我嘗試了Jquery。

如果您需要使用此代碼。

var a = 0 
$('ul li').each(function() { 
    $(this).attr("id",a); 
    a++; 
}); 
var b = a-1; 
$('#'+b).attr('style','background-color:green');​ 
1

任何元素中只有最後一個子元素。在你的例子中,它是<li class='foo'>Bar</li>。如果你有孩子的確切數字,雖然,你可以使用相鄰兄弟組合子:

LI:first-child + LI + LI + LI {/* here are declarations for 4th LI. */} 
+0

這將選擇所有具有至少三個緊接在前面的「li」同胞的「li」元素;即第四個起。你可以使用':nth-​​child(4)'或':nth-​​last-child(2)'來做你所描述的事情。 – Borodin 2012-03-05 22:50:45

+0

謝謝,我現在已經給'LI'選擇器中的第一個添加了':first:child'。 ':nth-​​child()'不像跨鄰接兄弟組合器(IE7 +)那樣跨瀏覽器。 – 2012-03-05 22:55:56

+1

這更好,但重點在於:CSS中沒有辦法選擇不屬於給定類的一組兄弟中的最後一個。事實上,沒有辦法過濾前一個選擇器的結果。 – Borodin 2012-03-06 05:13:02

8

回答你的問題是否有可能鏈:not()然後:last-child?(或者更簡單地說,可以僞類被鏈接?)是一個很好的答案。但正如其他人指出的,如果一個li:last-child有一個id="foo"那麼什麼都不會被選中。作爲演示,類似的表達

li:not(.bar):last-child { 
    background-color: green; 
}​ 

工作得很好。問題在於連續的選擇符都適用於整個上下文,而不適用於以前的表達式指定的子集,因此li:not(.foo):last-childli:last-child:not(.foo)完全相同,這顯然不是必需的。

+0

我也試過 li:not(.foo):last-of-type { background-color:green; } 但它仍然沒有工作,這是與你的答案一致。 – gentooboontoo 2012-03-05 15:52:26

+0

':最後一個類型'不會查看元素的類。 – BoltClock 2012-03-05 16:54:27

+0

@BoltClock:不,也不是':最後一個孩子'。你想說啥? – Borodin 2012-03-06 05:07:36

相關問題