开发者社区> 问答> 正文

浏览器如何解析css选择器?

展开
收起
前端问答 2019-12-12 07:40:24 863 0
1 条回答
写回答
取消 提交回答
  • 前端问答小助手

    浏览器会『从右往左』解析CSS选择器。

    我们知道DOM Tree与Style Rules合成为 Render Tree,实际上是需要将Style Rules附着到DOM Tree上,因此需要根 据选择器提供的信息对DOM Tree进⾏遍历,才能将样式附着到对应的DOM元素上。

    以下这段css为例

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

    我们对应的DOM Tree 如下

    image.png

    若从左向右的匹配,过程是:

    1. 从 .mod-nav 开始,遍历⼦节点 header 和⼦节点 div
    2. 然后各⾃向⼦节点遍历。在右侧 div 的分⽀中
    3. 最后遍历到叶⼦节点 a ,发现不符合规则,需要回溯到 ul 节点,再遍历下⼀个 li-a,⼀颗DOM树的节点动不动上 千,这种效率很低。

    如果从右⾄左的匹配:

    1. 先找到所有的最右节点 span,对于每⼀个 span,向上寻找节点 h3
    2. 由 h3再向上寻找 class=mod-nav 的节点
    3. 最后找到根元素 html 则结束这个分⽀的遍历。

    后者匹配性能更好,是因为从右向左的匹配在第⼀步就筛选掉了⼤量的不符合条件的最右节点(叶⼦节点);⽽从左向 右的匹配规则的性能都浪费在了失败的查找上⾯。

    2019-12-12 07:42:15
    赞同 1 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
WEB浏览器中即将发生的安全变化 立即下载
基于浏览器的实时构建探索之路 立即下载
基于浏览器的实时构建探索之路--玄寂 立即下载

相关镜像