我讨厌它们,它违背了CSS的级联特性,如果不小心使用它们,就会陷入添加更多!重要
的循环。
但我想知道它们对表现不好吗?
编辑
从(快速)回复中我可以得出结论,它不会对性能产生(重大)影响。 但很高兴知道,即使这只是作为一个额外的论据来让别人泄气;)。
EDIT 2
BoltClock指出,如果有2个!重要
声明,规范表示它将选择最具体的一个。
它应该不会对演出有任何影响。 在/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会有更大的影响。
如果你想优化你的页面,还有很多!重要的路线要走;);)