19

有没有办法使用 CSS 选择器来获取元素列表中的中间孩子?

我知道没有文字:middle-child选择器,但是还有另一种方法而不使用 Javascript 吗?

4

6 回答 6

30

这对我来说效果很好:

*:not(:first-child):not(:last-child) {
    ...
}

你可以在这里看到一个例子:http: //codepen.io/bentomas/pen/Gwqoe

对此的一个警告是它仅适用于 IE 9+:http ://caniuse.com/#feat=css-sel3

于 2014-11-06T20:08:49.330 回答
12

虽然不优雅,但如果你知道元素总数的上限和下限,你可以采取蛮力的方法来选择中间元素。

例如,以下规则将选择一组 5、7 或 9 个元素中的中间元素。

div:nth-child(3):nth-last-child(3) {
  /* The middle element in a set of 5 is the 3rd element */
}

div:nth-child(4):nth-last-child(4) {
  /* The middle element in a set of 7 is the 4th element */
}

div:nth-child(5):nth-last-child(5) {
  /* The middle element in a set of 9 is the 5th element */
}

或者使用 Sass:

@for $i from 3 through 5 {
    div:nth-child(#{$i}):nth-last-child(#{$i}) {
        /* The middle element */
    }
}
于 2015-07-13T19:26:34.920 回答
10

您可以使用“不是第一个也不是最后一个”的方法,如下所示:

CSS

li:not(:first-child):not(:last-child) {
  color:red;
}

HTML

<ul>
    <li>First</li>
    <li>Second</li>
    <li>Third</li>
</ul>

检查JsFiddle

于 2015-07-27T09:42:18.677 回答
1

If you want to apply a style to all elements that are neither first children nor last children, you could use :not(:first-child), apply the style, and then use :last-child to 'take the style away' from the last element. But you'd have to think about what happens when there are less than 3 elements.

于 2014-04-16T16:29:56.820 回答
0

你试过:nth-child(#)吗?

根据您要选择哪一个,您只需将 # 替换为数字即可。

于 2013-06-24T03:26:22.633 回答
-8

Javascript 是执行此客户端的唯一方法。

于 2013-06-24T22:30:40.157 回答