我很好奇(这就是全部)看你如何选择元素的所有子元素,除了前两个和后两个元素。
I've a method,但这是令人讨厌和难以理解的。必须有一个更清晰的方法,不需要8个伪选择器。
:not(:nth-child(1)):not(:nth-child(2)):not(:nth-last-child(1)):not(:nth-last-child(2)) {
background: purple;
}
是的,那太可怕了。它从字面上选择所有元素:不是第一个或第二个第一个或最后一个。必须有一个方法使用2
作为半变量,而不是在伪选择器上堆积。
I thought of another one(仍然很乱):
:not(:nth-child(-1n+2)):not(:nth-last-child(-1n+2)) {
background: purple;
}
答案 0 :(得分:42)
你甚至不需要:not()
。 :nth-child(n+3):nth-last-child(n+3)
工作正常。
查看here。
答案 1 :(得分:24)
除了使用:nth-child
和:not(:nth-last-child)
之外,我没有看到任何其他选项。
我的版本:hr:nth-child(n+3):not(:nth-last-child(-n+2))
根据:nth-child
参考:
:nth-child
CSS伪类匹配文档树中具有an+b-1
兄弟节点的元素,对于n的给定正值或零值,并且具有父元素。换句话说,此类匹配索引属于集合
{ an + b; ∀n ∈ N }
的所有子项。
所以nth-child(n+3)
匹配所有元素,从第三个元素开始。
:nth-last-child
的工作方式类似,但从元素集合的末尾开始,因此:nth-last-child(-n+3)
仅匹配从集合结束开始的2个元素。由于:not
这两个元素从选择器中排除。
答案 2 :(得分:3)
您可以简单地将紫色设置为所有元素,然后将其从3个不需要的元素中删除:
element { background: purple }
element:first-child, element:nth-child(2), element:last-child, element:nth-last-child(2) {
background: none; /* or whatever you want as background for those */
}
这非常容易阅读