提问者:小点点

是!重要的对表现不好?


我讨厌它们,它违背了CSS的级联特性,如果不小心使用它们,就会陷入添加更多!重要的循环。

但我想知道它们对表现不好吗?

编辑
从(快速)回复中我可以得出结论,它不会对性能产生(重大)影响。 但很高兴知道,即使这只是作为一个额外的论据来让别人泄气;)。

EDIT 2
BoltClock指出,如果有2个!重要声明,规范表示它将选择最具体的一个。


共3个答案

匿名用户

它应该不会对演出有任何影响。 在/source/layout/style/nscsdatablock.cpp#572上看到了Firefox的CSS解析器,我认为这就是处理CSS规则覆盖的相关例程。

它似乎只是一个简单的检查“重要”。

  if (aIsImportant) {
    if (!HasImportantBit(aPropID))
      changed = PR_TRUE;
    SetImportantBit(aPropID);
  } else {
    // ...

此外,source/layout/style/nscsdatablock.h#219中的注释

    /**
     * Transfer the state for |aPropID| (which may be a shorthand)
     * from |aFromBlock| to this block.  The property being transferred
     * is !important if |aIsImportant| is true, and should replace an
     * existing !important property regardless of its own importance
     * if |aOverrideImportant| is true.
     * 
     * ...
     */

>

  • Firefox使用手动编写的自顶向下解析器。 在这两种情况下,每个CSS文件都被解析为样式表对象,每个对象都包含CSS规则。

    然后,Firefox创建包含结束值的样式上下文树(在按正确顺序应用所有规则之后)

    来自:http://taligarsiel.com/projects/HowBrowsersWork1.htm#CSS_Parsing

    现在,您可以很容易地看到,在上面描述的对象模型的情况下,解析器可以很容易地标记受!importance影响的规则,而不需要太多的后续开销。 性能下降不是反对!重要的好论据。

    然而,可维护性确实受到了打击(正如其他答案提到的那样),这可能是您反对它们的唯一理由。

  • 匿名用户

    我不认为!important就浏览器匹配规则的速度而言本质上是糟糕的(它不构成选择器的一部分,只是声明的一部分)

    但是,正如前面所说的那样,它将降低代码的可维护性,并因此可能导致代码由于将来的更改而不必要地增加其大小。 使用!重要还可能降低开发人员的性能。

    如果你真的很挑剔,你也可以说!migrator给你的CSS文件增加了11个额外的字节,这并不多,但是我想如果你在你的样式表中有相当多的!migrator,它就可以加起来。

    只是我的想法,不幸的是,我找不到任何有关!重要如何影响性能的基准。

    匿名用户

    !重要有它的位置。 在这一点上相信我。 它已经拯救了我很多次,而且作为一个短期的解决方案,在找到一个更长的,更优雅的方法来解决你的问题之前,它往往更有用。

    然而,就像大多数事情一样,它被滥用了,但没有必要担心‘性能’。 我敢打赌,一个1x1的小GIF在网页上的性能比!migrance会有更大的影响。

    如果你想优化你的页面,还有很多!重要的路线要走;);)