css - 获取所有直接子项的通用选择器和第 n 个子项选择器之间的区别?

标签 css performance css-selectors

我想知道,在 css 中获取每个直接子节点是否有区别

tag > *

tag > :nth-child(n)

我知道通用选择器很慢,但我不知道第 n 个子选择器在做什么。

最佳答案

I know that the universal selector is slow

不,通用选择器快速,因为它除了保证匹配外什么都不做(有极少数异常(exception),但它们不适用于此处)。唯一“慢”的情况是当您的页面包含大量元素(数量级为数千)时 — 然后浏览器必须在每个元素上运行它以确定它是否是任何父元素的子元素。

使用 :nth-child(n) 是不必要地要求浏览器评估 n 表达式,而不是立即匹配元素而不问任何问题。即使浏览器确实优化了 :nth-child(n),您仍然可以保证完全匹配 * 的工作方式。因此,您实际上只是在使用 :nth-child(n)(比 * 长 12 个字节)浪费空间,而没有从中获得任何计算 yield 只需使用 *

坚持使用通用选择器。或者,如果您担心 CSS 选择器的性能,您总是可以向每个所需的子元素添加一个类名,然后选择该类,但代价是标记膨胀。

*:nth-child(n) 之间唯一的功能区别是特异性——* 的特异性为零,即小于伪类。您通常不需要额外的特殊性,因此再次强调,没有理由不坚持使用 * 用于此用例。请参阅我对 this question 的回答对于以特异性为中心的用例。

关于css - 获取所有直接子项的通用选择器和第 n 个子项选择器之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44965442/

相关文章:

html - 自定义滚动条但一直消失的效果

css - 为不同的断点设置元素的大小

CSS 后代选择器

css - 为什么:first-child:before target all elements?

jquery - Algolia 自动完成 - 如何做出响应

css - 背景图片 : how to fill whole div if image is small and vice versa

c++ - 多线程性能

html - 我如何选择所有具有类的元素,除了具有与模式匹配的 id 的祖先的元素?

wpf - 首次使用 WPF 中的 WCF 非常慢

c - C中的空间数据结构