我多次使用:last-child
选择器,主要是在列表中使用border-bottom
时,我对最后一个孩子使用border: none;
,或使用边距时。所以我的问题是,:last-child
选择器从性能的角度来看是不是很糟糕?
我也听说它已从CSS2规范中删除,因为使用:first-child
很容易让浏览器检测到,但是为了检测:last-child
,它需要循环回来。
答案 0 :(得分:11)
如果因为性能问题而从CSS2推迟,但在Selectors 3中重新引入,我怀疑这是因为性能不再是以前的问题。
请注意:last-child
是权威和唯一方式来选择父级的最后一个孩子(显然除:nth-last-child(1)
之外)。如果浏览器实施者不再有性能问题,我们也不应该作为作者。
我可以考虑使用:first-child
而不是:last-child
覆盖边框样式的唯一令人信服的理由是允许与IE7和IE8兼容。如果这提高了性能,那就让它成为副作用。如果您不需要 IE7和IE8支持,那么您不应该被迫使用:first-child
而不是:last-child
。即使浏览器性能绝对至关重要,您也应该通过测试和基准测试以正确的方式解决它,而不是过早优化。
答案 1 :(得分:3)
一般来说,核心CSS选择器运行良好,我们大多数人不应该担心使用它们。是的,其中一些确实比其他人表现更差,但即使表现最差的也不太可能成为您网站的主要瓶颈。
除非你已经完善了其他所有内容,否则我建议不要担心这一点。使用YSlow等分析工具查找您网站上的真实性能问题并修复这些问题。
在任何情况下,即使给定的CSS选择器(或任何其他浏览器功能)存在显着的性能影响,我也会说浏览器制造商有责任修复它,而不是你的解决方案。< / p>
答案 2 :(得分:-1)
我相信它仍然是让最后一个孩子最简单,最低效的方式。 我的意思是,所有其他方式来获得最后一个孩子的表现会更差,因为之前W3C社区不会做任何工作。