[教程] CSS的优化

浏览器如何识别你的选择器 首先我们需要清楚,浏览器是如何读取选择器,以识别样式,并将相应的样式附于对应的HTML元素,达到美化页面的效果。" 浏览器读取你的选择器,遵循的原则是从选择器的右边到左边读取。换句话说,浏览器读取选择器的顺序是由右到左进行。" 比如说:
  1. div.nav > ul li a[title]
复制代码
上面的实例来说,浏览器首先会尝试在你的HTML标签中寻找“ a[title]”元素,接着在匹配 “li和ul”,最后在去匹配“ div.nav”。这就是前成所主的“ 选择器从右到左的原则”。
选择器的最后一部分,也就是选择器的最右边(在这个例子中就是a[title]部分)部分被称为“ 关键选择器”,它将决定你的选择器的效率如何?是高还是低。
老版本的浏览器可以过滤掉不匹配的选择器,而直接匹配更高效的选择器。
那么如何让关键选择器更有效,性能化更高呢?其实很简单,主要把握一点“ 越具体的关键选择器,其性能越高”。
那么什么样类型的选择器,其性能高?什么样的类型的选择器性能低呢?下面我们就针对两个问题来展开具体的学习。
CSS选择器的效率如果你阅读了本站的有关于选择器类型的介绍的话,你对选择器并不会感到陌生。就算你没读过,我想CSS选择器不会让我们觉得是新东西,比如我们常用的基本选择器“元素标签选择器div”、“id选择器#header”、“类选择器.class”,或者说我们很少见的伪类选择器“:focus”以及更复杂的css3选择器“:nth-child”等等。选择器有一个固有的效率,我们来看一个顺序:
  • id选择器(#myid)
  • 类选择器(.myclassname)
  • 标签选择器(div,h1,p)
  • 相邻选择器(h1+p)
  • 子选择器(ul > li)
  • 后代选择器(li a)
  • 通配符选择器(*)
  • 属性选择器(a[rel="external"])
  • 伪类选择器(a:hover,li:nth-child)
上面九种选择器的效率是从高到低排下来的,基中ID选择器的效率是最高,而伪类选择器的效率则是最底。


综合上面的顺序,我们清楚的知道,id和类名用于关键选择器上效率是最高的,而CSS3的仿伪类和属性选择器,虽然使用方便,但其效率却是最低的。我们下面一起来看几个实例的对比:
  1. div #myid
复制代码
效率要比下面的高:
  1. #myid div
复制代码
第一种选择器比第二种选择器效率高,大家或许会问为什么?其实根据前面所介绍的我们就不难理解了,因为第一个选择器的“关键选择器”使用了“ID选择器”,而第二个选择器的“关键选择器”使用的是“标签选择器”,对比下来,“ID选择器”效率高过“标签选择器”,所以说第一个选择器的效率要高于第二个选择器。在类名或ID名前面加上标签也会致使选择器效率变低的,比如说:
  1. #myid
  2. .myclassname
复制代码
上面两个选择的效率要高于下面的选择器:
  1. p#myid
  2. p.myclassname
复制代码
来自Mozilla的几点建议介绍了几种书写高效率的CSS选择器的方法,让大家参考一下:
  • 避免普遍规则
  • 不要在ID选择器前加标签名或类名
  • 不要在类名选择器前加标签名
  • 尽可能使用具体的类别
  • 避免使用后代选择器
  • 标签分类规则中不应该包含一个子选择器
  • 子选择器的问题
  • 借助相关继承关系
  • 使用范围内的样式表


我们应该怎么做前面说“ID选择器”的效率是最高的,那么今天我们写样式,为了提高选择器的效率,是不是我们要在每一个文档的HTML元素中都加入ID名呢?我想这样的做法是没有的。对于一个有语义的代码编写和如何提高性能,以前他们之间如何的平衡?其实这个选择器的效率低一点,对于大多数网站来说并不会有太大的影响,但对于一个大型的网站,产生大量的流量这就会有差别了,也就很值得我们去对他进行优化。那么我们就很有必要的去了解他们是如何工作,比如说,一般情况下哪些选择器的使用效率更高。来看两个简单的例子:
  1. #myid
复制代码
上面的选择器高于下面的:
  1. p#myid
复制代码
后者的写法我发现还是有很多朋友这样写,但我不知道你为什么需要在ID前面加一个标签?难道你同一个页面会有多个相同的ID不成?我们接下来在来看一个实例,用于列表上的,比如说我们制作导航菜单的:
  1. #nav a
复制代码
高效于:
  1. #nav li a
复制代码
上面只是介绍了两个常碰到的实例,在这里说这两个实例,主要目的是让你在今后的编写样式时,能注意这方面的的细节,从而加快你的代码效率。扯了这么多,其实就是想说,CSS的选择器对一个网站的性能也是有关系的,学习之后,希望大家在平时的编写之时能尽量克服一些没必要的错误,从而提高这方面的性能。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值