我讨厌它们,它违背了 CSS 的级联特性,如果你不小心使用它们,你最终会陷入添加更多!important.
!important
但我想知道它们对性能有害吗?
编辑 从(快速)回复中,我可以得出结论,它不会对性能产生(显着)影响。但很高兴知道,即使它只是作为劝阻他人的额外论据;)。
EDIT 2 BoltClock 指出,如果有 2 个!important声明,规范会选择最具体的一个。
它不应该对性能产生任何明显的影响。看到 Firefox 的 CSS 解析器,/source/layout/style/nsCSSDataBlock.cpp#572我认为这是相关的例程,处理CSS 规则的 覆盖 。
/source/layout/style/nsCSSDataBlock.cpp#572
这似乎只是对“重要”的简单检查。
if (aIsImportant) { if (!HasImportantBit(aPropID)) changed = PR_TRUE; SetImportantBit(aPropID); } else { // ... }
另外,评论在 source/layout/style/nsCSSDataBlock.h#219
source/layout/style/nsCSSDataBlock.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 文件都被解析为一个 StyleSheet 对象,每个对象都包含 CSS 规则。 Firefox 然后创建包含最终值的样式上下文树(在以正确的顺序应用所有规则之后)
Firefox 使用手动编写的自顶向下解析器。在这两种情况下,每个 CSS 文件都被解析为一个 StyleSheet 对象,每个对象都包含 CSS 规则。
Firefox 然后创建包含最终值的样式上下文树(在以正确的顺序应用所有规则之后)
来自:http://taligarsiel.com/Projects/howbrowserswork1.htm#CSS_parsing
现在,您可以很容易地看到,在使用上述对象模型的情况下,解析器可以!important轻松地标记受影响的规则,而无需太多后续成本。性能下降 并不是 反对!important.
但是,可维护性确实会受到影响(如其他答案所述),这可能是您反对它们的唯一论据。