CSS类和属性选择器之间的性能

Tot*_*Tot 9 css performance css-selectors

我想知道使用属性选择器而不是类选择器是否存在性能问题.

div.test {}
div[test] {}
Run Code Online (Sandbox Code Playgroud)

PS:我只对CSS性能感兴趣,而不是JS.

Ant*_*son 10

根据这篇文章,类选择器比属性选择器更有效.

  • 这篇文章已经7岁了。是否有最新的基准? (3认同)
  • 现在已经11岁了。 (2认同)

小智 5

有人实际上创建了一个现实生活中的选择器测试来展示选择器匹配性能。

该表概述了属性选择器比标准类慢大约 3 倍。

依赖属性选择器还需要更多字符来定位元素。最好定义简短的类名,以保持样式表较小。

例子:

// 17 Characters (attribute)
[title="example"] {
 ...
}

// 6 Characters (class)
.title {
 ...
}
Run Code Online (Sandbox Code Playgroud)

http://scope.bitbucket.org/tests/selector-matching-performance/

  • 这两个选择器的比较不相等,如果不指定值:`[title]`,则只是 1 个字符的差异。需要考虑的更重要的事情是“data-”前缀,如果您发现值得使用它来确保您的网站功能相同,以防未来将同名的新属性添加到 HTML 标准中,或者如果您需要使用 [HTMLOrForeignElement.dataset](https://developer.mozilla.org/en-US/docs/Web/API/HTMLOrForeignElement/dataset) 只读属性。尽管使用 gzip/压缩,大小/字节很可能不会有很大差异。 (5认同)
  • 答案中的链接已损坏。它存档于 https://web.archive.org/web/20160723023304/http://scope.bitbucket.org/tests/selector-matching-performance/ (4认同)

Ani*_*Ani 1

不存在性能问题。两者的作用相同。但是 css 的类和元素的特殊性是不同的。

特异性- 特异性决定浏览器应用哪个 CSS 规则。

如果两个选择器应用于同一元素,则特异性较高的选择器获胜。

但特殊性是有层次的。

  1. 内联样式(文档中样式的存在)。内联样式存在于您的 XHTML 文档中。它直接附加到要设置样式的元素。例如
  2. ID(ID 选择器的数量) ID 是页面元素的标识符,例如#div。
  3. 类、属性和伪类(类选择器的数量)。该组包括 .classes、[attributes] 和伪类,例如 :hover、:focus 等。
  4. 元素和伪元素(元素(类型)选择器的数量)。包括例如:before 和:after。

资料来源:http ://coding.smashingmagazine.com/2007/07/27/css-specificity-things-you-should-know/

因此div.test {}更加具体。

  • 您甚至读过您引用的文字吗?它将类和属性分组在一起,使它们相等,因此 `div.test` *不能*比 `div[test]` 更具体。 (13认同)
  • 我的印象是这个问题与具体性无关。 (12认同)