css选择器执行顺序,css选择器是什么
本篇文章给大家谈谈css选择器执行顺序,以及css选择器是什么对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。
css选择器有哪些各种选择器优先级大小顺序
CSS选择器如下:
1.
标签名选择器
div
{
color:Red;}
/即页面中的各个标签名的css样式
2.类选择器
.divClass
{color:Red;}
/即定义的每个标签的class
中的css样式
3.ID选择器
#myDiv
{color:Red;}
/即页面中的标签的id
4.后代选择器(类选择器的后代选择器)
.divClass
span
{
color:Red;}
/即多个选择器以逗号的格式分隔
命名找到准确的标签
5.群组选择器
div,span,img
{color:Red}
/即具有相同样式的标签分组显示
选择器的优先级
1.最高优先级是
(直接在标签中的设置样式,假设级别为1000)
2.次优先级是(ID选择器
,假设级别为100)
#myDiv{color:Red;}
3.其次优先级是(类选择器,假设级别为10)
.divClass{color:Red;}
4.最后优先级是
(标签选择器,假设级别是
1)
div{color:Red;}
5.那么后代选择器的优先级就可以计算了啊
比如
.divClass
span
{
color:Red;}
优先级别就是:10+1=11
CSS选择器的优先级
通常我们可以将CSS的优先级由高到低分为六组:
1、无条件优先的属性只需要在属性后面使用!important。它会覆盖页面内任何位置定义的元素样式。当然,IE 6不支持这个属性,于是它也成为一种hack被很多人所熟知,真正使命被人淡忘。
2、第二高位的优先属性是在html中给元素标签加style。由于该方法会造成CSS的难以管理,所以不推荐使用。
3、第三级优先的属性是由一个或多个id选择器来定义的。例如#id{margin:0;}会覆盖.classname{margin:3px;}。
4、第四级的属性由一个或多个类选择器、属性选择器、伪类选择器定义。如.classname{margin:3px;}会覆盖 div{margin:6px;}
5、第五级由一个或多个类型选择器定义。如 div{margin:6px;}覆盖*{margin:10px;}。
最低一级的选择器是为一个通配选择器,用*{margin:10px;}这样的类型来定义。
另外,可以用一句极为简单的话来描述CSS优先级问题:当一个CSS选择器拥有更多的高级别属性时,它的优先级就会比较高。如#i100
*.c20*.c10{}的优先级就会高于#i100*.c10 div p span em{}
,这是由于前者拥有一个第三级和两个第四级的选择器而后者第三级和第四级的选择器各为一个,当然前者优先级会比较高。
如果想学习和交流更多html前端开发的技术你可以来我们这个群:先写下这三个数字:432,然后在写下中间这三个数字:664,最后写下的三个数字是:883,按照这个顺序连起来,群就会出现。还有更多的技术资料,学习课程。
CSS选择器是一个非常灵活的CSS属性,优雅的使用它会使你的页面代码不再臃肿,而且还可以作为hack的妙用方法之一。
当比较多个相同级别的CSS选择器优先级时,它们定义的位置将决定一切。下面从位置上将CSS优先级由高到低分为六级:
1、位于<head/>标签里的<style/>中所定义的CSS拥有最高级的优先权。
2、第二级的优先属性由位于<style/>标签中的@import引入样式表所定义。
3、第三级的优先属性由<link/>标签所引入的样式表定义。
4、第四级的优先属性由<link/>标签所引入的样式表内的@import导入样式表定义。
5、第五级优先的样式有用户设定。
最低级的优先权由浏览器默认。
理解了这些CSS优先级问题后,也就不必苦恼于样式定于中的此类问题了。
怎么提高CSS选择器效率
首先我们需要清楚,浏览器是如何读取选择器,以识别样式,并将相应的样式附于对应的HTML元素,达到美化页面的效果。Chris
Coyier曾在《Efficiently Rendering
CSS》一文中说过“浏览器读取你的选择器,遵循的原则是从选择器的右边到左边读取。换句话说,浏览器读取选择器的顺序是由右到左进行”。比如说:
div.nav> ul li a
上面的实例来说,浏览器首先会尝试在你的HTML标签中寻找“a”元素,接着在匹配“li和ul”,最后在去匹配“div.nav”。这就是前成所主的“选择器从右到左的原则”。
选择器的最后一部分,也就是选择器的最右边(在这个例子中就是a[title]部分)部分被称为“关键选择器”,它将决定你的选择器的效率如何?是高还是低。
老版本的浏览器可以过滤掉不匹配的选择器,而直接匹配更高效的选择器。记得David Hyatt在《Writing efficient
CSS for use in the Mozilla
UI》说过:“这个关键选择器可以大大提高选择器的性能,少检查一个给定的元素规则,就可以更有效的将样式匹配给对应的HTML元素。”那么如何让关键选
择器更有效,性能化更高呢?其实很简单,主要把握一点“越具体的关键选择器,其性能越高”
那么什么样类型的选择器,其性能高?什么样的类型的选择器性能低呢?下面我们就针对两个问题来展开具体的学习。
CSS选择器的效率
如果你阅读了本站的有关于选择器类型的介绍的话,你对选择器并不会感到陌生。就算你没读过,我想CSS选择器不会让我们觉得是新东西,比如我们
常用的基本选择器“元素标签选择器div”、“id选择器#header”、“类选择器.class”,或者说我们很少见的伪类选择器“:focus”以
及更复杂的css3选择器“:nth-child”等等。
选择器有一个固有的效率,我们来看Steve Souders给排的一个顺序:
id选择器(#myid)
类选择器(.myclassname)
标签选择器(div,h1,p)
相邻选择器(h1+p)
子选择器(ul> li)
后代选择器(li a)
通配符选择器(*)
属性选择器(a[rel="external"])
伪类选择器(a:hover,li:nth-child)
上面九种选择器的效率是从高到低排下来的,基中ID选择器的效率是最高,而伪类选择器的效率则是最底。详细的介绍大家还可以点击Writing efficient CSS selectors。
综合上面的顺序,我们清楚的知道,id和类名用于关键选择器上效率是最高的,而CSS3的仿伪类和属性选择器,虽然使用方便,但其效率却是最低的。我们下面一起来看几个实例的对比:
div#myid
效率要比下面的高:
#myid div
第一种选择器比第二种选择器效率高,大家或许会问为什么?其实根据前面所介绍的我们就不难理解了,因为第一个选择器的“关键选择器”使用了
“ID选择器”,而第二个选择器的“关键选择器”使用的是“标签选择器”,对比下来,“ID选择器”效率高过“标签选择器”,所以说第一个选择器的效率要
高于第二个选择器。
在类名或ID名前面加上标签也会致使选择器效率变低的,比如说:
div
#myid
上面两个选择的效率要高于下面的选择器:
p#mydiv
p.myclassname
来自Mozilla的几点建议
David在《Use efficient CSS selectors》中介绍了几种书写高效率的CSS选择器的方法,下面我将他们移到这里来让大家参考:
写道
1避免普遍规则
2不要在ID选择器前加标签名或类名
3不要在类名选择器前加标签名
4尽可能使用具体的类别
5避免使用后代选择器
6标签分类规则中不应该包含一个子选择器
7子选择器的问题
8借助相关继承关系
9使用范围内的样式表
如果你不够清楚上面所讲的是什么,你可以点击这里,他会让你更容易了解这些规则。
我们应该怎么做
前面说“ID选择器”的效率是最高的,那么今天我们写样式,为了提高选择器的效率,是不是我们要在每一个文档的HTML元素中都加入ID名呢?
我想这样的做法是没有的。对于一个有语义的代码编写和如何提高性能,以前他们之间如何的平衡?其实这个选择器的效率低一点,对于大多数网站来说并不会有太
大的影响,但对于一个大型的网站,产生大量的流量这就会有差别了,也就很值得我们去对他进行优化。那么我们就很有必要的去了解他们是如何工作,比如说,一
般情况下哪些选择器的使用效率更高。来看两个简单的例子:
#myid
上面的选择器高于下面的:
p#myid
后者的写法我发现还是有很多朋友这样写,但我不知道你为什么需要在ID前面加一个标签?难道你同一个页面会有多个相同的ID不成?
我们接下来在来看一个实例,用于列表上的,比如说我们制作导航菜单的:
#nav a
高效于:
#nav li a
上面只是介绍了两个常碰到的实例,在这里说这两个实例,主要目的是让你在今后的编写样式时,能注意这方面的的细节,从而加快你的代码效率。
文章到此结束,如果本次分享的css选择器执行顺序和css选择器是什么的问题解决了您的问题,那么我们由衷的感到高兴!