English 中文(简体)
CSS选择器的速度/冗余性 [已关闭]
原标题:
  • 时间:2009-03-06 01:35:47
  •  标签:

有人了解CSS中浏览器选择器的速度吗?换句话说,不同的选择器在同一浏览器中相互比较的速度如何?

例如,我经常看到(并写)这样的代码:

#content #elem { ...rules... }

但是由于这些元素是唯一的ID,我应该只需要#elem,不是吗?这让我想到了,也许浏览器拥有更复杂的选择器是更快的 - 我的想法是浏览器可能会找到#content并知道只在那个元素中查找,而不是其他地方。

另一个例子可能是 table tr td .class vs table .class

最佳回答

说实话,你说的时间太短了,我不认为它真的有什么影响。

在使用更具体的选择器方面 - 我认为这是一个好的做法,有几个原因:

  1. It enhances code readability - at a glance can see more where you re selectors are being applied relative to the HTML.
  2. It reduces the likelyhood of your selectors being overwritten somewhere else, as a selector with even more specifity would have be written which is very unlikely to happen.

你所说的可能会在使用jQuery等JavaScript库时有所不同,因为它们必须自己解析整个文档,但我自己从未注意到任何速度差异。

问题回答

这是我在快速搜索后得到的一些信息,在这里

任何正常使用情况下,速度可能会有所差异,但是这在任何正常使用情况下都不会显而易见。编写CSS的真正原因是专业性。也就是说,如果您具有

#content #elem {color: black;} 

无需翻译“and”, 因为它是一个连接词并且在中文中没有一个对应的单词。

#elem {color: red;}

该元素应该被涂成黑色,因为这是更具体的规则。

不想卖弄聪明,但您撰写这个问题所花费的时间可能超过了所有访问您网站的用户(与#id#id2与#id2有关)所节省的所有时间之和。回答这个问题所需的时间也是如此...

你现在可以投我反对票了 :)

“Mozilla 的指南可能很有趣。”

  1. 在效率和可读性之间总是有一些选择。当然,table tr td .class 最易读,但效率很低,可以简化 - 你是否见过任何地方(假设有效的标记)没有 tabletr 没有 td?至少可以注释冗余部分,如:

    /* table tr */ td .class {
        color: #ccf;
    }
    
  2. 有时候,就像其他人提到的那样,您需要更多的特定性,例如您的#elem应该在特定上下文中的#content之外的任何地方都是红色的。

    #elem {
        /* usually red */
        color: red;
    }
    
    #content #elem {
        /* except when in specific context */
        color: black;
    }
    




相关问题
热门标签