2012-03-05 66 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

相关问题