只有当CSS中有Y兄弟时,我如何定位最后N个兄弟元素?

Nea*_*eal 3 html css css-selectors css3

当有Y兄弟时,是否有可能针对最后N个兄弟元素?

例如,我有项目列表,当且当有8,11,14 ......等兄弟元素时,我希望最后两个看起来不同(所以8 + 3n).

如果还有其他数量的孩子,我希望他们看起来都一样.

Bol*_*ock 8

到目前为止,最简单的方法是使用自己的一组伪类来定位要设置样式的2个元素.

正如您所说,最后一个孩子由3n + 8(8,11,14 ......)表示.然后,倒数第二个孩子是3n + 7(7,10,13 ......).

li:nth-last-child(1):nth-child(3n+8),
li:nth-last-child(2):nth-child(3n+7) {
  color: red;
}

ul { counter-reset: item; list-style-type: none; }
li { display: inline; padding: 0.25em; }
li::before { content: counter(item); counter-increment: item; }
Run Code Online (Sandbox Code Playgroud)
<ul><li><li><li><li><li><li><li><li></ul>
<ul><li><li><li><li><li><li><li><li><li></ul>
<ul><li><li><li><li><li><li><li><li><li><li></ul>
<ul><li><li><li><li><li><li><li><li><li><li><li></ul>
<ul><li><li><li><li><li><li><li><li><li><li><li><li></ul>
<ul><li><li><li><li><li><li><li><li><li><li><li><li><li></ul>
<ul><li><li><li><li><li><li><li><li><li><li><li><li><li><li></ul>
Run Code Online (Sandbox Code Playgroud)

你也可以使用一个复杂的选择器,使用Can CSS中的技术来检测一个元素有多少个孩子?,用3n + 8代替:nth-last-child()参数,并使用一个额外:nth-last-child(-n+2)的目标,用一个伪类来定位最后两个元素:

li:first-child:nth-last-child(3n+8) ~ li:nth-last-child(-n+2) {
  color: red;
}

ul { counter-reset: item; list-style-type: none; }
li { display: inline; padding: 0.25em; }
li::before { content: counter(item); counter-increment: item; }
Run Code Online (Sandbox Code Playgroud)
<ul><li><li><li><li><li><li><li><li></ul>
<ul><li><li><li><li><li><li><li><li><li></ul>
<ul><li><li><li><li><li><li><li><li><li><li></ul>
<ul><li><li><li><li><li><li><li><li><li><li><li></ul>
<ul><li><li><li><li><li><li><li><li><li><li><li><li></ul>
<ul><li><li><li><li><li><li><li><li><li><li><li><li><li></ul>
<ul><li><li><li><li><li><li><li><li><li><li><li><li><li><li></ul>
Run Code Online (Sandbox Code Playgroud)