【发布时间】:2015-02-03 17:58:15
【问题描述】:
所以我偶然发现了几篇关于 CSS 优化的文章:
- http://csswizardry.com/2011/09/writing-efficient-css-selectors/
- https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Writing_efficient_CSS
显然 CSS 是从右到左读取的。这意味着div table a 的读法如下:首先检索页面上的所有a 元素,然后检索所有包含a 的table 元素(对吗?),然后是所有div 元素,其中两者都在他们(对吧?)。
我在任何地方都找不到答案的问题是:如何解析像 div#div_id 这样的 CSS 规则?首先解析所有id为“div_id”的元素,然后应用过滤器从那一堆#div_id元素中获取所有div元素?还是首先解析所有 div 元素,然后应用过滤器来获取 id 为“div_id”的所有内容?
我提到的第一篇文章说CSS中推荐的效率顺序是:#id > > .class > tag > rest。但是tag#id呢?
澄清一下:我喜欢输入div#div_id,只是为了让我自己清楚#div_id 适用于div 元素,而无需查找HTML 来找出哪个元素的样式我正在查看,但如果这会花费我很多网站的性能,我不想那样使用它。那么推荐的编写规则的方式是什么?我应该在我的选择器中删除标签吗?真的那么贵吗?
答案
答案将是,正如 jbutler483 所说:留下标签名称会更快。如果您想澄清您正在设计的元素,请不要使用div#my_id,而是使用#div_my_id。如果您不太关心性能,您仍然可以使用div#my_id,但它会慢一些(但您可以问问自己它是否真的会对您的应用程序产生那么大的影响)。
【问题讨论】:
-
tag#id的意义何在?您是否在多个页面上有具有相同 id 和不同标签的元素? id 必须是唯一的,因此您永远不能在同一页面上拥有两个具有相同 id 和不同标签的元素。 -
嗯,是的,有时我会这样做。假设我有一个 p.bold 和一个 span.bold,我希望它们的行为不同。 (好吧,这不是 ID,但问题还是一样。)
-
我知道这对类是有意义的。我特意问你为什么要使用 ID,因为 ID 必须是唯一的。
标签: performance css css-selectors