我经常使用:last-child
选择器,主要是border-bottom
在我用于最后一个孩子的列表中使用选择器时border: none;
,或者使用边距时。所以我的问题是,:last-child
从性能的角度来看,选择器是否不好?
此外,我听说它已从 CSS2 规范中删除,因为使用:first-child
很容易被浏览器检测到,但为了检测:last-child
它需要循环返回。
我经常使用:last-child
选择器,主要是border-bottom
在我用于最后一个孩子的列表中使用选择器时border: none;
,或者使用边距时。所以我的问题是,:last-child
从性能的角度来看,选择器是否不好?
此外,我听说它已从 CSS2 规范中删除,因为使用:first-child
很容易被浏览器检测到,但为了检测:last-child
它需要循环返回。
如果它出于性能问题而从 CSS2 推迟,但在 Selectors 3 中重新引入,我怀疑这是因为性能不再像以前那样成为问题。
请记住,这:last-child
是选择父母的最后一个孩子的最终且唯一:nth-last-child(1)
的方法(显然,除了 )。如果浏览器实现者不再担心性能问题,我们作为作者也不应该。
我能想到的唯一令人信服的理由是要允许与 IE7 和 IE8 兼容:first-child
。:last-child
如果这提高了性能,那就让它成为一个副作用。如果您不需要IE7 和 IE8 支持,那么您不应该被迫使用:first-child
over :last-child
. 即使浏览器性能绝对至关重要,您也应该通过测试和基准测试以正确的方式解决它,而不是过早的优化。
一般来说,核心 CSS 选择器的性能足够好,我们大多数人不应该担心使用它们。是的,其中一些确实比其他的性能更差,但即使是性能最差的也不太可能成为您网站的主要瓶颈。
除非您已经将其他所有内容优化到完美,否则我建议您不要担心这一点。使用像 YSlow 这样的分析工具来查找您网站上真正的性能问题并解决这些问题。
无论如何,即使对于给定的 CSS 选择器(或任何其他浏览器功能)存在显着的性能影响,我会说修复它是浏览器制造商的责任,而不是你的责任。
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.