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

时间:2016-01-28 13:56:09

标签: html css css3 css-selectors

当有Y兄弟时,是否可以定位最后N个兄弟元素?

例如我有项目列表,if和如果有8,11,14 ......等兄弟元素我希望最后两个看起来不同(所以{{1} })。

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

3 个答案:

答案 0 :(得分: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; }
<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>

你也可以使用一个复杂的选择器,使用Can CSS detect the number of children an element has?中的技术,用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; }
<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>

答案 1 :(得分:3)

基于

  

当且仅当有8个元素我希望最后两个看起来不同。

你会得到这个:

li:nth-child(7):nth-last-child(2),
li:nth-child(8):nth-last-child(1) {
  color: red;
}
Will colorize 7 and 8
<ul>
  <li>1</li>
  <li>2</li>
  <li>3</li>
  <li>4</li>
  <li>5</li>
  <li>6</li>
  <li>7</li>
  <li>8</li>
</ul>
Will colorize nothing since it has more then 8 elements
<ul>
  <li>1</li>
  <li>2</li>
  <li>3</li>
  <li>4</li>
  <li>5</li>
  <li>6</li>
  <li>7</li>
  <li>8</li>
  <li>9</li>
  <li>10</li>
</ul>

答案 2 :(得分:0)

  

当有Y时,是否可以定位最后N个兄弟元素   兄弟姐妹?

是的,您可以链接伪类,以便它们必须匹配从开头开始的计数和来自结尾的计数:

ol li:nth-of-type(3n + 8):nth-last-of-type(1),
ol li:nth-of-type(3n + 7):nth-last-of-type(2) {
color: rgb(255,0,0);
}

示例:

ol {
float:left;
width:80px;
}

ol li:nth-of-type(3n + 8):nth-last-of-type(1),
ol li:nth-of-type(3n + 7):nth-last-of-type(2) {
color: rgb(255,0,0);
}
<ol>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
</ol>

<ol>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
</ol>

<ol>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
</ol>

<ol>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
</ol>

<ol>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
</ol>

<ol>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
</ol>

<ol>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
</ol>

<ol>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
<li>Element</li>
</ol>