美文网首页
CSS选择器从右向左的匹配规则

CSS选择器从右向左的匹配规则

作者: 李欢li | 来源:发表于2017-11-02 20:45 被阅读0次

.mod-nav h3 span{font-size:16px;}

如果不知道匹配规则,可能的理解是从左向右匹配:先找到.mod-nav,然后逐级匹配h3、span,在这个过程中如果遍历到叶子节点都没有匹配就需要回溯,继续寻找下一个分支。

但事实上,CSS选择器的读取顺序是从右向左。

还是上面的选择器,它的读取顺序变成:先找到所有的span,沿着span的父元素查找h3,中途找到了符合匹配规则的节点就加入结果集;如果直到根元素html都没有匹配,则不再遍历这条路径,从下一个span开始重复这个过程(如果有多个最右节点为span的话)。在某条CSS规则下(比如.mod-nav h3 span),会形成一条符合规则的索引树,树由上至下的节点是规则中从右向左的一个个选择符匹配的节点。索引树遍历的具体过程可以看寒冬大大的一段视频。


假如DOM的结构如上图,匹配规则是.mod-nav h3 span。

若从左向右的匹配,过程是:从.mod-nav开始,遍历子节点header和子节点div,然后各自向子节点遍历。在右侧div的分支中,最后遍历到叶子节点a,发现不符合规则,需要回溯到ul节点,再遍历下一个li-a,假如有1000个li,则这1000次的遍历与回溯会损失很多性能。再看看从右至左的匹配:先找到所有的最右节点span,对于每一个span,向上寻找节点h3,由h3再向上寻找class=mod-nav的节点,最后找到根元素html则结束这个分支的遍历。很明显,两种匹配规则的性能差别很大。之所以会差别很大,是因为从右向左的匹配在第一步就筛选掉了大量的不符合条件的最右节点(叶子节点);而从左向右的匹配规则的性能都浪费在了失败的查找上面。当然这是比较明显情况,如果在叶子上存在多个不符合条件的span,从右向左的规则也会走一些弯路(这时就需要优化CSS选择器了)。但平均来说它还是更高效,因为大多时候,一个DOM树中,符合匹配条件的节点(如.mod-nav h3 span)远远远远少于不符合条件的节点。

相关文章

  • CSS选择器从右向左的匹配规则

    .mod-nav h3 span{font-size:16px;} 如果不知道匹配规则,可能的理解是从左向右匹配:...

  • CSS选择器从右向左的匹配规则

    下面这个例子,CSS选择器它是如何工作的? 第一次接触选择器匹配规则时,很容易理解为从左到右匹配:先找到.mod-...

  • JavaScript--性能优化

    1.事件委托2.节流函数3.浏览器渲染 3.浏览器渲染 因为CSS选择器从右向左的匹配规则,所以浏览器第一步先查找...

  • 【CSS】选择器解析规则

    当我们接触css选择起的时候,会认为浏览器解析css选择器是从左向右解析;其实不然浏览器解析css选择器是从右向左...

  • 来了老弟,新鲜的前端基础知识回顾--CSS篇

    浩瀚星辰,莫忘心记。——Abner CSS 篇 1、CSS选择器 CSS选择器即通过某种规则来匹配相应的标签,并为...

  • 二、CSS基础

    css——层叠样式表 选择器 用于匹配HTML元素有不同的匹配规则多个选择器可以叠加 值得关注的选择器元素选择器 ...

  • CSS选择器

    CSS选择器规定了CSS规则会作用到哪些元素上。 基本选择器 元素选择器:根据元素名称匹配元素 类选择器:根据元素...

  • CSS 全解析实战(三)-CSS 基础

    1 选择器(1) 基本规则;是分隔符,而不是语句结束符 选择器浏览器是从右往左解析的,继续向左解析只是验证,如此一...

  • CSS

    CSS规则 at 规则 CSS选择器 CSS选择器 继承与层叠 继承与层叠 CSS 属性 CSS 属性 CSS值 ...

  • 有关CSS

    如何写出更好的CSS?(CSS是从右往左进行解析) ①避免使用*(全局)选择器。(耗费性能) ②CSS选择器的层级...

网友评论

      本文标题:CSS选择器从右向左的匹配规则

      本文链接:https://www.haomeiwen.com/subject/pbvapxtx.html