css选择器优选级及匹配原理(转)

作为一个Web开发者,掌握必要的前台技术也是很重要的,特别是在遇到一些实际问题的时候。这里给大家列举一个例子:

给一个p标签增加一个类(class),可是执行后该class中的有些属性并没有起作用。通过Firebug查看,发现没有起作用的属性被覆盖了。这个时候突然意识到了CSS选择器的优先级问题,这里就CSS选择器的优先级问题做了一些总结。

选择器种类

严格来讲,选择器的种类可以分为三种:标签名选择器、类选择器和ID选择器。而所谓的后代选择器和群组选择器只不过是对前三种选择器的扩展应用。而在标签内写入style=""的方式,应该是CSS的一种引入方式,而不是选择器,因为根本就没有用到选择器。而一般人们将上面这几种方式结合在一起,所以就有了5种或6种选择器了。

三种基本的选择器类型

语法如下:

◆标签名选择器,如:p{},即直接使用HTML标签作为选择器。

◆类选择器,如.polaris{}。

◆ID选择器,如#polaris{}。

注意,ID选择器跟类选择器有很大的不同:一个页面内不能出现相同的ID;再就是ID也是后台开发人员会经常用的,所以前端开发人员应该尽量少的使用。当然跟后台人员的工作配合十分娴熟之后,这些都不会成为限制。

扩展选择器

◆后代选择器,如.polaris span img{},后代选贼器实际上是使用多个选择器加上中间的空格来找到具体的要控制标签。

◆群组选择器,如div,span,img{},群组选择器实际上是对CSS的一种简化写法,只不过把有相同定义的不同选择器放在一起,省了很多代码。

选择器的优先级别

了解了各种选择器后,还有一个重要的知识点就是CSS选择器的优先级。这也就是为什么polaris会遇到文章开头的问题。举个简单的例子:

  1. <div class="polaris">

  2. <span class="beijixing">

  3. beijixing

  4. </span>

  5. <span>

  6. polaris

  7. </span>

  8. </div>

如果已经把.polaris下面span内的字体设置成红色:

  1. .polaris span {color:red;}

这时,如果要改变.beijixing的颜色为蓝色,用下面的命令是不能实现的:

  1. .beijixing {color:blue;}

出现这种情况就是因为后一个命令的优先级不够,两条相互冲突的样式设置,浏览器只会执行优先级较高的那个。

那么选择器的优先级是怎么规定的呢?

一般而言,选择器越特殊,它的优先级越高。也就是选择器指向的越准确,它的优先级就越高。通常我们用1表示标签名选择器的优先级,用10表示类选择器的优先级,用100标示ID选择器的优先级。比如上例当中
.polaris span {color:red;}的选择器优先级是 10 + 1 也就是11;而 .polaris
的优先级是10;浏览器自然会显示红色的字。
理解了这个道理之后下面的优先级计算自是易如反掌:

  1. div.test1 .span var 优先级 1+10 +10 +1

  2. span#xxx .songs li 优先级1+100 + 10 + 1

  3. #xxx li 优先级 100 +1

对于什么情况下使用什么选择器,用不同选择器的原则是:第一:准确的选到要控制的标签;第二:使用最合理优先级的选择器;第三:HTML和CSS代码尽量简洁美观。通常:

1、最常用的选择器是类选择器。

2、li、td、dd等经常大量连续出现,并且样式相同或者相类似的标签,我们采用类选择器跟标签名选择器结合的后代选择器 .xx li/td/dd
{} 的方式选择。

3、极少的情况下会用ID选择器,当然很多前端开发人员喜欢header,footer,banner,conntent设置成ID选择器的,因为相同的样式在一个页面里不可能有第二次。

在这里不得不提使用在标签内引入CSS的方式来写CSS,即:

  1. <div style="color:red">polaris</div>

这时候的优先级是最高的。我们给它的优先级是1000,这种写法不推荐使用,特别是对新手来说。这也完全违背了内容和显示分离的思想。DIV+CSS的优点也不能再有任何体现。

后代选择器的定位原则

在这里介绍一下对于后代选择器,浏览器是如何查找元素的呢?

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

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

  1. <style>

  2. DIV#divBox p span.red{color:red;}

  3. ><style>

  4. <body>

  5. <div id="divBox">

  6. <p><span>s1</span></p>

  7. <p><span>s2</span></p>

  8. <p><span>s3</span></p>

  9. <p><span class=‘red‘>s4</span></p>

  10. </div>

  11. </body>

如果按从左到右查找,哪会先查找到很多不相关的p和span元素。而如果按从左到右的方式进行查找,则首先就查找到<span
class=‘red‘>的元素。firefox称这种查找方式为key
selector(关键字查询),所谓的关键字就是样式规则中最后(最右边)的规则,上面的key就是span.red。

简洁、高效的CSS

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

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

一般写法:DIV#divBox

更好写法:#divBox

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

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

一般写法:span.red

更好写法:.red

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

  1. p.red{color:red;}

  2. span.red{color:#ff00ff}

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

◆尽量少使用层级关系

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

更好写法:.red{..}

◆使用class代替层级关系

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

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

原文链接:http://polaris1119.javaeye.com/blog/764428

时间: 2024-10-13 15:38:38

css选择器优选级及匹配原理(转)的相关文章

CSS选择器、优先级与匹配原理(转)

CSS选择器.优先级与匹配原理 导航

详解CSS选择器、优先级与匹配原理

最常用的五类CSS选择器 准确而简洁的运用CSS选择器会达到非常好的效果.我们不必通篇给每一个元素定义类(class)或ID,通过合适的组织,可以用最简单的方法实现同样的效果.在实际工作中,最常用的选择器有以下五类: 一.标签选择器: 顾名思议,标签选择器是直接将HTML标签作为CSS选择器,可以是p.h1.dl.strong等HTML标签.如: p{font:12px;} em{color:blue;} dl{float:left;margin-top:10px;} 二.id选择器: 我们通常

CSS选择器、优先级与匹配原理

polaris不是前台开发人员,然而作为一个Web开发者,掌握必要的前台技术也是很重要的.说实话,polaris对前台技术还是蛮感兴趣的,只是一直没有用心系统的学过,所以了解的知识有点杂.这篇文章是polaris通过网上的一些知识结合自己的问题做的一些总结,一来当作笔记,二来希望能够对初学者有点帮助. 今天在修改博客时,遇到了一个问题:给一个p标签增加一个类(class),可是执行后该class中的有些属性并没有起作用.通过Firebug查看,发现没有起作用的属性被覆盖了(呵呵,废话,要不然不会

详解CSS选择器、优先级与匹配原理【转】

作为一个Web开发者,掌握必要的前台技术也是很重要的,特别是在遇到一些实际问题的时候.这里给大家列举一个例子: 给一个p标签增加一个类(class),可是执行后该class中的有些属性并没有起作用.通过Firebug查看,发现没有起作用的属性被覆盖了.这个时候突然意识到了CSS选择器的优先级问题,这里就CSS选择器的优先级问题做了一些总结. 51CTO推荐阅读:巧妙地使用CSS选择器 选择器种类 严格来讲,选择器的种类可以分为三种:标签名选择器.类选择器和ID选择器.而所谓的后代选择器和群组选择

转------详解CSS选择器、优先级与匹配原理

作为一个Web开发者,掌握必要的前台技术也是很重要的,特别是在遇到一些实际问题的时候.这里给大家列举一个例子: 给一个p标签增加一个类(class),可是执行后该class中的有些属性并没有起作用.通过Firebug查看,发现没有起作用的属性被覆盖了.这个时候突然意识到了CSS选择器的优先级问题,这里就CSS选择器的优先级问题做了一些总结. 选择器种类 严格来讲,选择器的种类可以分为三种:标签名选择器.类选择器和ID选择器.而所谓的后代选择器和群组选择器只不过是对前三种选择器的扩展应用.而在标签

转载:详解CSS选择器、优先级与匹配原

转载网址:http://polaris1119.javaeye.com/blog/764428 文章就CSS选择器的优先级问题做了一些总结,严格来讲,选择器的种类可以分为三种:标签名选择器.类选择器和ID选择器. 作为一个Web开发者,掌握必要的前台技术也是很重要的,特别是在遇到一些实际问题的时候.这里给大家列举一个例子: 给一个p标签增加一个类(class),可是执行后该class中的有些属性并没有起作用.通过Firebug查看,发现没有起作用的属性被覆盖了.这个时候突然意识到了CSS选择器的

CSS选择器、CSS hack及CSS执行效率

主要内容: 1.CSS选择器.优先级与匹配原理 2. CSS 引入的方式有哪些 ? link 和 @import 的区别是 ? 3.CSS hack 4.如何书高效CSS  一.CSS选择器.优先级与匹配原理     CSS选择器大概可以分为:1.id选择器(#myid)  2.类选择器(.myclassname)  3.标签选择器(div,h1,p)  4.相邻选择(h1+p)6.后代选择器(li a)7.通配符选择器(*)  8.属性选择器(a[rel='externaml']) 9.伪类选

CSS 选择器(转)

原文转自:http://www.cnblogs.com/xyzhanjiang/p/5447406.html CSS 选择器除了样式表匹配元素时需要用到,在使用 jQuery 等库的时候也可以利用 CSS 选择器来选择元素,因此作为前端开发需要熟练掌握.下面是一些常用的 CSS 选择器示例. 元素选择器 E,选择所有指定元素名称的元素,例如 p,选择所有的 p 元素. 通用选择器 *,选择所有元素,例如: * { box-sizing: border-box; } 类选择器 .class,用一个

弄清楚CSS的匹配原理让你写出高效的CSS

用了这么多年的CSS,现在才明白CSS的真正匹配原理,不知道你是否也跟我一样?看1个简单的CSS: DIV#divBox p span.red{color:red;} 按习惯我们对这个CSS 的理解是,浏览器先查找id为divBox的DIV元素,当找到后,再找其下的所有p元素,然后再查找所有span元素,当发现有span的class为red的时候,就应用该style.多么简单易懂的原理,可是这个理解却是完完全全相反.错误的.兴城市费永礼品 浏览器CSS匹配不是从左到右进行查找,而是从右到左进行查