CSS明星选择器被认为是有害的(以及为什么)?

gpi*_*ino 35 css

CSS中的星形选择器是否会影响页面渲染性能?

是否有任何警告使用它?

* {
  margin:0;
  padding:0;
}
Run Code Online (Sandbox Code Playgroud)

and*_*toi 57

当涉及到性能,史蒂夫Souders的是男子:

其中一份报告的无耻报价:

优化CSS选择器的关键是关注最右边的选择器,也称为键选择器(巧合?).这是一个更昂贵的选择器:A.class0007*{}.虽然这个选择器可能看起来更简单,但浏览器匹配起来更昂贵.因为浏览器从右向左移动,所以它首先检查与键选择器匹配的所有元素"*".这意味着浏览器必须尝试将此选择器与页面中的所有元素进行匹配.

[大胆强调我的]

  • 我还引用"很明显,带有与许多元素匹配的键选择器的CSS选择器可以明显减慢网页速度." 有趣的阅​​读,谢谢. (4认同)
  • 我更喜欢这句话"基于这些测试,我有以下假设:对于大多数网站来说,优化CSS选择器可能带来的性能提升很小,而且不值得花费." (4认同)
  • 此外,2018 年与 2009 年的浏览器性能特征现在大不相同。我想知道关于 `*` 性能的建议今天是否重要 - 如果浏览器优化到足以让它变得无关紧要,我不会感到惊讶 (3认同)

小智 16

对于某些使用的属性*可能会产生意想不到

* { color: blue }
li { color: red }
Run Code Online (Sandbox Code Playgroud)

现在给出<li><i>text</i></li>,文字将是蓝色的!

  • 是的,但是当你设置'*'的属性时,你可能不会想到它*.使用'*'和界面元素或您很少使用的元素更是如此. (3认同)
  • @ ApoY2K:仅仅因为它可以正常工作,并不意味着可以预期。当您拥有*选择器时,很容易忘记它。当您还记得的时候,**每次添加一个新元素**时都必须考虑一下,以检查您是否在应用不需要的样式。 (2认同)

Pet*_*lon 6

一种观点认为*并不是说*是一个性能问题,而是一个很好的老头 - 它有一个IE问题.它影响IE 5,5.5和6以及Macintosh变体.基本上,有一种称为HTML星形选择器的bug,适用如下:

* html
Run Code Online (Sandbox Code Playgroud)

这应该被解释为没有元素匹配,因为html是root并且不能是子元素.IE将其解释为html.

* * body
Run Code Online (Sandbox Code Playgroud)

同样,应该匹配任何元素,因为body不能是孙元素 - 即使它是HTML的子元素.IE将此解释为*body.

* html body
Run Code Online (Sandbox Code Playgroud)

这应该不匹配任何元素,但IE将其解释为html正文.

性能方面通常被视为应用*仅表示该样式适用于页面中的每个元素.我很少发现这本身就是一个问题 - 它会成为一个问题,这意味着你可能在那里得到了太多的标记.同样,因为它适用于所有内容,这意味着您需要增加代码以应对不应该具有该样式的元素.与其他一切一样,由您来决定权衡和平衡应该是什么.