当前位置: 首页 > 面试题库 >

为什么浏览器从右到左匹配CSS选择器?

侯博裕
2023-03-14
问题内容

浏览器引擎从右到左匹配CSS选择器。因此,他们首先找到孩子,然后检查父母,看他们是否符合规则的其余部分。

  1. 为什么是这样?
  2. 只是因为规格说明吗?
  3. 如果从左到右进行评估,是否会影响最终的布局?

对我来说,最简单的方法是使用元素数量最少的选择器。因此,ID首先(因为它们只能返回1个元素)。然后,可能是类或具有最少节点数的元素-
例如,页面上可能只有一个范围,因此请使用引用范围的任何规则直接转到该节点。

听起来这样做是为了避免查看父母的所有子代(可能很多),而不是查看必须是一个孩子的所有父代。即使DOM很深,它也只会在每个级别查看一个节点,而不是RTL匹配中的多个节点。


问题答案:

请记住,当浏览器进行选择器匹配时,它具有一个元素(它正在尝试确定其样式的元素)以及所有规则及其选择器,并且它需要查找与该元素匹配的规则。这与通常的jQuery不同,例如,您只有一个选择器,并且需要查找与该选择器匹配的所有元素

如果您只有一个选择器,并且只有一个要与该选择器进行比较的元素,那么从左到右在某些情况下更有意义。但这绝对 不是
浏览器的情况。该浏览器正在尝试呈现Gmail或其他内容,并且<span>正在尝试设置其样式,并且Gmail在其样式表中添加了10,000多个规则(我没有增加这个数字)。

特别是在这种情况下,浏览器正在查看考虑的大多数选择器,它们与所讨论的元素
匹配。因此,问题就成为了决定选择器与匹配项的匹配程度是否尽可能快的问题之一。如果在不匹配的案例中需要做一些额外的工作,则由于在不匹配的案例中保存的所有工作,您仍然会获胜。

如果您仅通过将选择器的最右边部分与您的元素进行匹配而开始,那么它可能会不匹配并且您已经完成了。如果匹配,则您需要做更多的工作,但只与树的深度成比例,在大多数情况下,树的深度并不大。

另一方面,如果您从匹配选择器的最左边开始,您将与之匹配什么呢?您必须开始遍历DOM,寻找可能与之匹配的节点。只是发现最左边部分没有匹配项可能需要一段时间。

因此,浏览器从右边匹配;它提供了一个明显的起点,使您可以很快地摆脱大多数候选选择器。您可以在http://groups.google.com/group/mozilla.dev.tech.layout/browse_thread/thread/b185e455a0b3562a/7db34de545c17665上看到一些数据(尽管表示法令人困惑),但结果是特别针对Gmail两年前,对于70%的(规则,元素)对,您只需检查规则最右边选择器的标记/类/标识部分,就可以确定该规则不匹配。Mozilla的页面加载性能测试套件的相应数字为72%。因此,真的有必要尝试尽快消除所有规则的2/3,然后再担心匹配其余1/3。

还要注意,浏览器已经做了其他优化,甚至可以避免匹配绝对不匹配的规则。例如,如果最右边的选择器具有一个ID,并且该ID与元素的ID不匹配,则在壁虎中根本不会尝试将该选择器与该元素进行匹配:尝试的“具有ID的选择器”集合来自对元素ID的哈希表查找。因此,仅考虑最右边选择器的标记/类/
ID,这就是70%的规则很有可能匹配, 但仍然 不匹配。



 类似资料:
  • 本文向大家介绍为什么说css的选择器是从右向左匹配?相关面试题,主要包含被问及为什么说css的选择器是从右向左匹配?时的应答技巧和注意事项,需要的朋友参考一下 从右往左匹配会首先排除很多错误的匹配,打个简单的比方,孩子只有一个父亲,但是父亲可以有很多个孩子,从孩子找父亲简单,从父亲找某个指定的孩子可能就会找到错误的孩子。当然,选择器也是得优化的,不然哪怕从右往左匹配也会有一些性能上的问题。

  • 问题内容: 我正在阅读Python入门教科书,发现以下内容: 同一行上的运算符具有相同的优先级,并且从左到右应用,除了幂运算从右到左应用。 我了解大多数情况,但我不明白为什么他们说从右到左应用了幂运算。他们也没有提供任何示例。另外,我可以问这样的一般性问题吗,还是只喜欢解决问题的问题? 问题答案: 该运营商遵循正常的数学约定; 它是右关联的: 在通常的计算机科学术语中,数学上的幂是右联想的,这意味

  • 统一使用 Chrome 作为 Web 开发者,我们的无论是浏览信息或者开发项目,都离不开浏览器。在本站的系列课程中,为了避免歧义,我们 要求 大家统一使用 Chrome 作为指定浏览器。 Google Chrome,是一款由 Google 公司开发的网页浏览器。Chrome 在 2008 年 9 月 2 日发布 Beta 版本,一经发布就广受好评。提供 50 种语言版本,有 Windows、OS

  • 问题内容: 是否有更改此文本的CSS代码 到这个 问题答案: 尝试这个 编辑:将此类应用于段落标记,您应该得到想要的结果。

  • 本文向大家介绍浏览器是怎样判断元素是否和某个CSS选择器匹配?相关面试题,主要包含被问及浏览器是怎样判断元素是否和某个CSS选择器匹配?时的应答技巧和注意事项,需要的朋友参考一下 先产生一个元素集合,然后从后往前判断; 浏览器先产生一个元素集合,这个集合往往由最后一个部分的索引产生(如果没有索引就是所有元素的集合)。然后向上匹配,如果不符合上一个部分,就把元素从集合中删除,直到真个选择器都匹配完,

  • 问题内容: 我找到了一个响应式电子邮件模板的示例,其中有诸如此类的CSS选择器: 如果与以下内容完全相同,为什么要使用此语法: 它对移动浏览器或其他任何影响吗? 问题答案: 该语法是属性选择。 这将选择带有的任何标签。但是,它 不会选择具有的(例如。它仅与_ 该属性完全匹配。 您可能需要阅读必须记住的30个CSS选择器。对于任何有前途的Web开发人员来说,这都是无价之宝。