@
guchengf 没听说过Chrome不是从右往左这件事……在CSS3及以下版本,我认为右往左是最佳的算法,除非有类似JIT的东西存在可能可以在某些情况下打破这个“惯例”,但这应该属于特定情况的特定优化,而非泛用的手段
哦补充一下,从右往左指的是最右边不是伪类、伪元素的情况,严格意义上说是取“最右边的那个正常的(id, class, tag, *, attribute)选择器”,而attribute在这“正常的选择器”之中是否合适我本人持质疑态度
至于CSS4出来,因为有shadow dom selector和parent selector(我没关注后来这2东西是进draft了还是被砍了),从右往左可能不是最佳的,但方案也无非是简单地变一下
CSS的基本算法的本质是“从真正作用于元素的那个选择器开始”,而CSS3及以下版本,真正作用于元素的肯定是最右那个,但有了parent selector,应该就是从parent那个开始找了
CSS之所以要这么找,原因在于CSS可以做selector map来把O(n)变O(1),而map的key必须要能从当前的DOM元素上获得,DOM元素上能获得无非是tag、id、class、attribute之流,所以必须把最右边那个直接和这个DOM相关的先开始从map中找出来,然后再往前找
简单伪算法
https://gist.github.com/otakustay/656ad559d110c3c868f8