7

我经常使用:last-child选择器,主要是border-bottom在我用于最后一个孩子的列表中使用选择器时border: none;,或者使用边距时。所以我的问题是,:last-child从性能的角度来看,选择器是否不好?

此外,我听说它已从 CSS2 规范中删除,因为使用:first-child很容易被浏览器检测到,但为了检测:last-child它需要循环返回。

4

3 回答 3

13

如果它出于性能问题而从 CSS2 推迟,但在 Selectors 3 中重新引入,我怀疑这是因为性能不再像以前那样成为问题。

请记住,这:last-child是选择父母的最后一个孩子的最终唯一:nth-last-child(1)的方法(显然,除了 )。如果浏览器实现者不再担心性能问题,我们作为作者也不应该。

我能想到的唯一令人信服的理由是要允许与 IE7 和 IE8 兼容:first-child:last-child如果这提高了性能,那就让它成为一个副作用。如果您不需要IE7 和 IE8 支持,那么您不应该被迫使用:first-childover :last-child. 即使浏览器性能绝对至关重要,您也应该通过测试和基准测试以正确的方式解决它,而不是过早的优化。

于 2013-04-22T10:24:32.140 回答
3

一般来说,核心 CSS 选择器的性能足够好,我们大多数人不应该担心使用它们。是的,其中一些确实比其他的性能更差,但即使是性能最差的也不太可能成为您网站的主要瓶颈。

除非您已经将其他所有内容优化到完美,否则我建议您不要担心这一点。使用像 YSlow 这样的分析工具来查找您网站上真正的性能问题并解决这些问题。

无论如何,即使对于给定的 CSS 选择器(或任何其他浏览器功能)存在显着的性能影响,我会说修复它是浏览器制造商的责任,而不是你的责任。

于 2013-04-22T11:22:39.597 回答
-1

I believe it's still the simplest, low-performance way to get your last child. by that I mean, all others way to get the last child will be worse for performance, because it won't have any work done by the W3C community before.

于 2013-04-22T10:07:19.220 回答