博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CSS解析误解-选择器的从右向左解析
阅读量:4129 次
发布时间:2019-05-25

本文共 1263 字,大约阅读时间需要 4 分钟。

对于下面两种css写法,相信很多人和我想的一样

ul.new-ul{…..}

.new-ul{….}

更高效。

 

其实我们的理解貌似没有错。如果在类名前面加上标签的话,这样浏览器就可以先找到所有对应的标签,然后匹配类名,这样就不用全局匹配了,查找速度自然会快很多。

我们这样的理解,意味着选择器解析是从左往右的,就像jQuery的选择器一样。

但是,实际上,css选择器的解析是从右往左的。

也就是说.className就会直接一步找到className,如果在前面放了一个标签,就像tag.className,就会再次匹配前面的标签名tag,层级的匹配也是类似的。那么,很明显,匹配的次数更多了。

 

浏览器CSS匹配不是从左到右进行查找,而是从右到左进行查找。比如DIV#divBox p span.red{color:red;},浏览器的查找顺序如下:先查找html中所有class='red'的span元素,找到后,再查找其父辈元素中是否有p元素,再判断p的父元素中是否有id为divBox的div元素,如果都存在则匹配上。

浏览器从右到左进行查找的好处是为了尽早过滤掉一些无关的样式规则和元素。

 

 

那么,我们们就可以明确,红色高亮部分的选择器查找要比黑色部分要快

.new-ul{….} /*快*/

ul.new-ul{….}
#new-ul{….} /*快*/
ul#new-ul{….}

那么,对于层级选择器也是一样

<ul class=”new-ul”>

    …..
    <li class=”new-ul-li”><a class=”new-ul-li-a” href=”#”></a></li>
    …..
</ul>

 那么针对上面的css结构,我们推荐使用.new-ul-li-a来选择到a,而不是.new-ul li a这样的层级选择。

参考资料

 

理解后,我们就可以写出更简洁、高效的css:

所谓高效的CSS就是让浏览器在查找style匹配的元素的时候尽量进行少的查找,下面列出一些我们常见的写CSS犯一些低效错误:

◆不要在ID选择器前使用标签名

一般写法:DIV#divBox

更好写法:#divBox

解释: 因为ID选择器是唯一的,加上div反而增加不必要的匹配。

◆不要再class选择器前使用标签名

一般写法:span.red

更好写法:.red

解释:同第一条,但如果你定义了多个.red,而且在不同的元素下是样式不一样,则不能去掉,比如你css文件中定义如下:

 

p.red{color:red;}  
span.red{color:#ff00ff}

如果是这样定义的就不要去掉,去掉后就会混淆,不过建议最好不要这样写

◆尽量少使用层级关系

一般写法:#divBox p .red{color:red;}

更好写法:.red{..}

◆使用class代替层级关系

一般写法:#divBox ul li a{display:block;}

更好写法:.block{display:block;}

 

参考:

         

转载地址:http://xfkvi.baihongyu.com/

你可能感兴趣的文章
HBASE安装和简单测试
查看>>
关于程序员的59条搞笑但却真实无比的编程语录
查看>>
搞笑--一篇有趣的文章编译自一篇西班牙博客。有一位美丽的公主,被关押在一个城堡中最高的塔上,一条凶恶的巨龙看守着她,需要有一位勇士营救她…
查看>>
非常不错 Hadoop 的HDFS (Hadoop集群(第8期)_HDFS初探之旅)
查看>>
Tomcat启动错误,端口占用
查看>>
laravel 修改api返回默认的异常处理
查看>>
高德坐标转换百度坐标 javascript
查看>>
tp5封装通用的修改某列值
查看>>
laravel控制器与模型名称不统一
查看>>
vue登录拦截
查看>>
npm配置淘宝镜像仓库以及electron镜像
查看>>
linux设置开机自启动脚本的最佳方式
查看>>
VUE SPA 单页面应用 微信oauth网页授权
查看>>
phpstorm 集成 xdebug 进行调试
查看>>
npm和node升级的正确方式
查看>>
laravel事务
查看>>
springcloud 连续请求 500
查看>>
vue复用新增和编辑表单
查看>>
Ubuntu 16.04 apt-get更换为国内阿里云源
查看>>
laravel部署到宝塔步骤
查看>>