如何使用css nth-child选择列表中的最后2项?

Joh*_*ohn 28 css css-selectors css3

可能吗?如果没有,有没有办法用jQuery做到这一点?

spl*_*ter 152

CSS3可以实现.考虑标记:

<ul>
    <li><a href="">First item</a></li>
    <li>Second item</li>
    <li><a href="">Test</a></li>
    <li><a href="">Test</a></li>
    <li><a href="">Pre-last item</a></li>
    <li><a href="">Last item</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)

要选择最后两个LI元素:

ul > li:nth-last-of-type(-n+2) {
    background: green;
}
Run Code Online (Sandbox Code Playgroud)

适用于所有当代浏览器,包括IE9,但不包括IE8及以下版本.要添加对这些浏览器的支持,您可以考虑使用Selectivizr.js

  • @BoltClock它也可能[与`nth-last-child`](http://jsfiddle.net/robertc/qVP8r/),但它不可能与`nth-child`因为从头开始选择OP希望从最终选择. (3认同)
  • 这次真是万分感谢! (3认同)
  • @Matt:我是超级迂腐但2016年我同意我原来的评论只是不必要地挑剔.不知道为什么我在robertc指出之后没有删除它.它现在已经消失了. (2认同)

小智 17

:last-child,
:nth-last-child(2) {
  ruleset
}
Run Code Online (Sandbox Code Playgroud)

也会玩.


小智 7

对我来说是这样的: li:not(:nth-last-child(-n+2))


met*_*ion 3

不幸的是这是不可能的。。忽略这个答案并查看下面的 spliters 答案

如果可能的话,它看起来会像......

ul li:last-child+li {...}
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为 + 将选择最后一个子级之后的直接兄弟级(当然,这没什么)。没有紧邻的前一个选择器。

使用 jQuery 有不同的方法可以实现这一点,性能最好的方法是......

var lastItems = $("#list li");
lastItems.slice(lastItems.length - 2).addClass("whatever");
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/qkzdJ/

  • 有可能的。规范和重复问题链接有示例,尽管不是使用 `:nth-child()` 而是使用 `:nth-last-child()`。 (4认同)
  • 不,你可以用CSS3解决:`ul li:nth-last-child(-n+2) {}` (4认同)