css - 应用 :nth-of-type to a pseudoselector rather than a class or element type (without jQuery or even JS)

标签 css css-selectors pseudo-class

我有这个:

<ol>
<li class="letter">
<li class="letter">
<li>
<li>
<li>
<li>
<li>
<li>
<li>
<li>
<li>
<li>
<li>
<li>
</ol>

我希望前 9 个不属于“字母”类的 li 元素以某种方式设置样式。所以,我的想法是,我选择那些不属于“字母”类的,然后使用 nth-of-type 进行选择:

li:not(.letter):nth-of-type(-n+9):before { ... }

但是,无论类别如何,这都会选择前 9 个,我使用的结果相同:

li:nth-child(-n+9):before { ... }

我看到了基于 E:nth-of-type.c:nth-of-type 进行选择的例子。怎么停在那里?为什么我不能使用 nth-of-type 从伪类中构建一个选择,就像我可以在元素或类中一样? (或者我能以某种方式吗?)

最佳答案

因为 :nth-of-type() 中的“类型”一词专门指“元素类型”,除此之外别无其他。

即使是您看到的使用类选择器限定 :nth-of-type() 的示例也是错误的;它们实际上是由其元素类型的第 n 个兄弟匹配,而不是其类。类选择器的意思是“只有具有此类的元素才匹配”,并且在计算 sibling 时实际上并未考虑。这就是为什么您在示例中使用两个选择器得到相同结果的原因。

使用当前的选择器规范,您无法选择与选择器的复杂组合相匹配的第 n 个同级,因此如果不了解或控制 HTML 结构,您目前无法使用 CSS 实现您想要实现的目标。当然,如果您知道只有前两个 li 元素会拥有该类,那么您可以这样做

li:nth-child(n+2):nth-child(-n+9)::before { ... }

但如果您的 HTML 结构会有所不同,那将不是很有用。

有一个 :nth-match() being proposed in Selectors 4为了这个特定的目的,但还没有关于实现的消息。所以现在,当涉及到纯 CSS 时,你运气不好。

关于css - 应用 :nth-of-type to a pseudoselector rather than a class or element type (without jQuery or even JS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14218213/

相关文章:

javascript - (HTML,CSS,JS) 试图添加可点击的下拉菜单,图标按钮

css - 如何删除 xlink 默认样式

css - 伪类 -moz-focus-inner 和 -moz-focusring 之间的区别

html - 如何根据 float 元素培养html block

html - 使用 CSS 隐藏仅包含空格的元素

css调试,跨浏览器兼容

javascript - 为什么我的背景不显示在 div 容器中?

html - CSS nth-of-type 没有按预期工作

CSS 选择器获取 HTML 树中特定类的最深元素

html - 如何使用 nth-child 对带有 rowspan 的表进行样式设置?