CSS星形选择器是否被认为有害(为什么)?

CSS星形选择器是否被认为有害(为什么)?,css,Css,CSS中的星形选择器是否影响页面呈现性能 使用它有什么注意事项吗 * { margin:0; padding:0; } 因为我在我的每个项目中都使用了完全相同的规则,并且没有一个项目有严重的性能问题,所以我会说:不,据我所知不是。一种观点是,与其说*是性能问题,不如说*是一个好的老宠儿-它有一个IE问题。它影响IE5、5.5和6以及Macintosh的变体。基本上,有一种称为HTML星形选择器的错误,其应用如下: * html 这应该解释为没有元素匹配,因为html是根元素,不能是子

CSS中的星形选择器是否影响页面呈现性能

使用它有什么注意事项吗

* {
  margin:0;
  padding:0;
}

因为我在我的每个项目中都使用了完全相同的规则,并且没有一个项目有严重的性能问题,所以我会说:不,据我所知不是。

一种观点是,与其说*是性能问题,不如说*是一个好的老宠儿-它有一个IE问题。它影响IE5、5.5和6以及Macintosh的变体。基本上,有一种称为HTML星形选择器的错误,其应用如下:

* html
这应该解释为没有元素匹配,因为html是根元素,不能是子元素。IE将其解释为html

* * body
同样,应该与no元素匹配,因为body不能是孙子元素,即使它是HTML的子元素。IE将其解释为身体

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


性能方面通常认为,应用*只意味着样式应用于页面中的每个元素。我很少发现这本身就是一个问题——在这一点上,它将成为一个问题,这意味着您可能已经有太多的标记了。类似地,由于它适用于所有内容,这意味着您需要增加代码以处理不应该具有这种风格的元素。与其他所有内容一样,由您决定权衡和平衡应该是什么。

对于某些属性,使用
*
可能会产生意外的结果

* { color: blue }
li { color: red }

现在给定
  • 文本
  • ,文本将为蓝色

    说到表演,史蒂夫·苏德斯是最佳人选:

    其中一份报告的无耻引述:

    优化CSS选择器的关键是 要将焦点放在最右边的选择器上, 也称为键选择器 (巧合?)。这里有一个更重要的问题 昂贵的选择器:A.class0007*{}。 虽然这个选择器看起来 更简单的是,它的成本更高 要匹配的浏览器。因为浏览器 从右向左移动,从 检查所有匹配的元素 键选择器“*”。这表示 浏览器必须尝试与此匹配 针对中所有元素的选择器 页面


    [bold emphasis mine]

    在什么情况下你听说过它是“有害的”?当以某种方式使用时,它的行为可能会因浏览器而异(例如,考虑
    *html{}
    )。我问这个问题也是因为我看到了“事实上的标准”css重置方法避免使用它。是的,但当您设置“”的属性时,您可能不会想到它。对于“”和接口元素或您很少使用的元素,情况更是如此。@ApoY2K:仅仅因为它可以正常工作,并不意味着它是预期的。当您有*选择器时,很容易忘记它。当您记住时,您不会忘记它o每次添加新元素时都要考虑一下,以检查是否应用了不想要的样式。@ApoY2k:当然,如果你是完美的,并且从不出错,那么你就永远不会编写出与预期不符的代码。否则,认为颜色是从父级继承的是合理的,这就是为什么此文本不是红色是未经验证的反恐执行官。为什么会出现意外?是蓝色的。那么怎么了?这不是意外的结果,星明确表示所有元素都是蓝色的。如果您从父选择器属性推断它们可能是红色的,那么这就是对cssI的理解不足。也引用“很明显,带有与许多元素匹配的键选择器的CSS选择器可以显著降低网页速度。”有趣的阅读,谢谢。我更喜欢这句话“基于这些测试,我有以下假设:对于大多数网站,优化CSS选择器可能带来的性能收益很小,不值得付出成本。"@arkanciscan这是idd非常正确的。优化CSS选择器可能是过早优化的最佳案例之一。此外,2018年和2009年的浏览器性能特征非常不同。我想知道关于
    *
    性能的建议今天是否重要-如果浏览器优化到不重要,我不会感到惊讶在这种情况下,rI不会称之为bug,但称之为开发人员错误