当我遇到 :nth-child
或 :nth-of-type
的完美用法时,我有点兴奋(了解两者之间的区别)。您对它们的理解越深,您获得的 CSS 极客体验就越多!
在这些简单的“食谱”(实际上是表达式)中,我将随意使用一个扁平的列表项列表和随机选择的数字。但应该很清楚如何更改它们以获得类似的选择。
仅选择第五个元素

li:nth-child(5) {
color: green;
}
要选择第一个元素,可以使用 :first-child,或者我相信您可以猜到如何更改上面的代码来实现这一点。
选择除了前五个以外的所有元素

li:nth-child(n+6) {
color: green;
}
如果这里有超过 10 个元素,它将选择所有超过 5 的元素。
仅选择前五个

li:nth-child(-n+5) {
color: green;
}
选择每个第四个,从第一个开始

li:nth-child(4n-7) { /* or 4n+1 */
color: green;
}
仅选择奇数或偶数

li:nth-child(odd) {
color: green;
}

li:nth-child(even) {
color: green;
}
选择最后一个元素

li:last-child {
color: green;
}
选择第 10 个,因为这里有 10 个元素,但如果有 8 个元素,它将选择第 8 个,或者如果有 1290 个元素,它将选择第 1290 个。
选择倒数第二个元素

li:nth-last-child(2) {
color: green;
}
选择第 9 个,因为这里有 10 个元素,但如果有 30 个元素,它将选择第 29 个。
想玩吗?
浏览器支持
有趣的是,:first-child
受 IE 7 支持,但直到 IE 9 才支持其余内容。除了 IE 之外,没有太多浏览器支持问题,如果您担心 IE,请使用 Selectivizr。如果您对浏览器支持感兴趣或很重要,请务必查看 何时可以使用……,它可以很好地跟踪这些信息。
非常有用!谢谢
不错的列表,但我色盲还是你把绿色和红色搞混了?不过,这仍然是一个不错的列表。可惜 IE 直到 IE9 才支持它(正如你在这里提到的 这里)
实际上,Chris,你用颜色表示的应该是文本为绿色,而在示例中没有文本^^。
我的意思是红色 :P
我也注意到了,它绝对只是为了说明情况,但看到一个绿色的球然后立刻读到 color: red! 确实很怪异。
哦,我明白了。一开始我就像这些家伙到底在说什么。我只是把“红色”改成了“绿色”,这样看起来不那么奇怪。它们都是假设的。
很棒的文章,Chris!我实际上并不知道 nth-child 接受这些值作为参数。我真的很需要更多地研究 CSS3,因为我还没有准备好将其用于生产环境。
看到奇数球串时,我想起了很多幼儿园的情景。顺便问一下,是你用纹理和质数做那个背景技巧的吗?也许可以用 nth-child 来解决?
为了提供上下文,关于质数背景的文章——http://designfestival.com/the-cicada-principle-and-why-it-matters-to-web-designers/
感谢您提供另一个很棒的解释,Chris,如果我没有弄错,请纠正我,但 jQuery 已经将大多数对 CSS3 伪选择器的支持构建到 Sizzle 中了吗?
它包含 :nth-child,但不包含 :nth-of-type。您可以使用以下方法将所有这些添加到 jQuery 中:https://github.com/keithclark/JQuery-Extended-Selectors/blob/master/jquery-extra-selectors.js
如果您指的是底部链接中的 Selectivizr,那就不一样了。它只是一个库,它可以使您编写的实际 CSS 代码生效。
有一些 jQuery 插件可以使浏览器支持它本身不支持的选择器,例如 http://www.selectivizr.com。jQuery 对 $(some_selectors) 采用稍微不同的语法。
查看 http://standardista.com/jquery/#slcjQuery(以及该页面上的下方内容),了解一些仅限 jQuery 的选择器。
啊,现在我明白了
也许对于 IE 来说是一个多余的解决方案,但你也可以使用 Chrome Frame 来启用它(以及 CSS 渐变、动画和其他所有功能)。
感谢这份资源!我一直都在寻找一个清晰地列出 :nth-child 选择器不同选项的指南,这是我见过的最好的一个。:nth-child 是良好 CSS 的重要组成部分,我一定会充分利用它。再次感谢!
Chris,对于较低版本的 IE 有任何修复方法吗?
谢谢
兄弟,看看文章的最后一段。
好的!
最后的“浏览器支持”
我仍然对这种方法很陌生,但我仍然在努力尝试,我觉得我只是触及了皮毛。
干得好!
我可以翻译成中文版本吗?
很棒!对我很有用。
非常感谢——我一直想知道如何使用 nth-child!
Chris,这篇文章很棒,很容易理解,也很实用。
顺便说一下,我知道你一直在关注你的统计数据,以了解你的访问者使用什么分辨率。现在我正在使用黑莓 9800,我简直不敢相信你的网站在屏幕上显示得如此完美,工作得如此出色,干得好!我不用在整篇文章中使用水平滚动条,而其他博客却经常出现这种情况,感谢你!:)
我认为这是由于他们的 CSS 中的媒体查询。页面会根据窗口/视窗的大小进行折叠。在桌面 Web 浏览器中加载主页面,并减小窗口的水平大小,页面会重新调整以适应大量宽度。
Chris,很棒的文章,有些东西我还不知道!
嗨,Chris,
我只想说“谢谢”。你的文章真是救星。而且太棒了,在一个网站上就能找到所有必要的 css 技巧。
谢谢!
Angelika (aka Lintzy)
IE 7 只部分支持
:first-child
。如果 HTML 注释位于第一个元素之前,:first-child
选择器将不起作用。即使旧浏览器不支持这些属性,你仍然可以使用 jQuery。
不错的功能列表。IE 总是像往常一样令人失望。
谢谢,Chris!我分享你对新 :nth-child 用法的热情!
我没有一个网站可以展示给你,只有一些我研究出来的 CSS 样式。对我来说有两个新的用途。我需要 CSS 对悬停显示不同的行为,以在左边显示文本,然后在中间点显示到右边。不用过多解释我实际做了什么,你可以看看代码以及我如何应用它 这里。
第二个例子使用奇数/偶数来实现除对表格布局中的交替列/行进行着色以外的功能。我取了一列屏幕截图,将它们定位在左边和右边(奇数/偶数),然后使用奇数/偶数悬停来根据奇数/偶数缩放图像,以便缩放能够正确显示。那个在 这里。
如果没有人能看到 Chris 如何将所有不同的 nth-child 例子有效地联系在一起的解释,请考虑一下:音量控制或其他滑块。第一个孩子,扬声器突出显示,音量最大。第二个到最后一个孩子,nth-last-child(2),再次突出显示,音量最小。最后一个孩子,扬声器静音(通常显示为红色的交叉符号)。我迫不及待地想编写代码!
如果我对这方面还不够了解,请宽恕我。我知道它可能无法涵盖所有可用的浏览器。我只做了大约 1 个半月。
好文章。
在编写网站代码时,我也喜欢使用 :nth-child。更少的代码膨胀,而且令人惊讶的是它在很多情况下都很方便。
嘿,Chris
感谢你提醒我注意 Selectivizr,我刚使用了 WordPress 插件版本,用于我的 :nth-child 导航栏——效果很好。
Selectivizr (http://selectivizr.com/) 是一个很棒的工具,可以在 Internet Explorer 6-8 中模拟 CSS3 伪类和属性选择器,非常值得一看,不错的 JS 用于 PE
只是想稍微扩展一下——我认为添加另一个演示来展示如何从列表末尾向后移动会很好。你有 :nth-last-child(2)——但是要选择最后 3 个元素(无论列表的大小),你需要::nth-last-child(-n+3)。感谢另一个很棒的演示。
很棒…
这是我见过的关于这方面最好的文章!谢谢,Chris。
我偶然发现了这个页面,想看看
:nth-child
选择器是否可以用来为表格中的列范围设置样式(即第 4-6 列)。我能够使用:nth-child
和:nth-last-child
的组合来完成任务。为了模仿提供的例子,这将类似于我想我会发布这个,以防其他人也正在寻找“nth-child 范围”选择器。
感谢酷炫的 CSS 教程。我正在尝试做一些不同的事情,我想选择每 4 个 div 元素
比如 1-4 有不同的背景,5-8 有不同的背景,9-12 与 1-4 相同,13-16 与 5-8 相同。请帮助我如何实现这一点。注意:div 的总数是可变的。
谢谢
所以我想能够在达到某个断点时隐藏段落中的特定数量的文本。我认为这里提到的方法无法实现这一点,对吗?是否有任何方法可以通过 css3 实现这一点,或者这只能在 PHP 或 JS 中完成?