CSS规则的执行顺序

1、特殊性

首先来看一下这个例子将会发生的情形:

以下是代码片段:
.grape { color:Blue; } 
H1 { color: Red; } 
<h1 class="grape">Meerkat <em>Central</em></h1>

 

H1和.grape都匹配上面的H1元素,那么到底应该使用哪一个呢?

实践证明.grape是正确答案,把句子显示为蓝色。

根据规范,一般的HTML元素选择符(H1,P 等)具有特殊性1,类选择符具有特殊性10,ID选择符具有特殊性100,值越大权重就越大,就优先选用。

 

以下是代码片段:
H1 { color: Red; } P EM { color: Blue; } .grape { color: Fuchsia; } P.bright { color: Yellow; } P.bright EM.dark{ color: Gray; } #ID01 { color: Red; }

 

2、继承

在特殊性的框架下,被继承的值具有特殊性0,也就是说任何显式声明的规则将会覆盖其继承样式,即便这条规则具有多高的权重。

 

以下是代码片段:
H1#ID01 { color: Red; } EM{ color: Gray; } <H1 ID="ID01>Meerkat <EM><Central</EM></H1>

 

虽然ID选择符特殊性最高,但由于在特殊性的框架下,继承值只有特殊性0,因些Central会显示为Gray颜色。

 3、STYLE元素

 还有sytle元素在CSS下权值定义为100,尽管ID选择也一样,实际上style元素比ID具有更高的特殊性。 

 

以下是代码片段:
#ID01 EM{ color: Gray; } <H1 ID="ID01">Meerkat <EM style="color: red;">Central</EM>!</H1>

 

会显示为red颜色。

4、重要性(!important)

!important具最高特特性比如说1000,因此!important规则会覆盖内联STYLE属性的内容。

 

以下是代码片段:
H1{ color: red !important; } <H1 style="color:black;">Meerkat Central!</H1>

 

将显示为RED颜色。 一种特殊情形

 

以下是代码片段:
P#warn { color: Red !important; } EM { color: Black; } <p id="warn">This text is red, but <em>emphasized text is black.</em></p>

 

虽然定义!important最高特殊性,但句子并没有全部显示为RED红色,为什么呢?也许我们得回头看看前面的规则,在前面的第二点继承中提“在特殊性的框架下,继承值只有特殊性0。”因此即便定义!important,继承里的特殊性也只有0,所以显示为特殊性为1的EM规则。

权重顺序为:继承 => HTML普通选择符 => 类选择符 =>style元素 => !important

5、层叠

1) 若两条规则具有相同的权值、起源及特殊性,那在样式表中最后出现的规则优先。

2) 任何位于文档中的规则都比引入的规则优先。

 

 

更理论一些的文章:

 

本文向大家描述一下CSS执行顺序与优先权的问题,首先就是CSS规则的specificity(特殊性),CSS2.1有一套关于specificity的计算方式,用一个四位的数字串(CSS2是三位)来表示,最终specificity越高的规则越特殊,在优先级判定时也就越有优势。

CSS执行顺序与优先权的问题

CSS执行顺序与优先权的问题其实就是一个冲突解决的问题,当同一个元素(或内容)被CSS选择符选中时,就要按照优先权取舍不同的CSS规则,这其中涉及到的问题其实很多。

首先就是CSS规则的specificity(特殊性),CSS2.1有一套关于specificity的计算方式,用一个四位的数字串(CSS2是三位)来表示,最终specificity越高的规则越特殊,在优先级判定时也就越有优势。关于specificity的具体计算在各种情况下的数字加成有如下一般规则:

◆每个ID选择符(#someid),加0,1,0,0。

◆每个class选择符(.someclass)、每个属性选择符(形如[attr=”"]等)、每个伪类(形如:hover等)加0,0,1,0

◆每个元素或伪元素(:firstchild)等,加0,0,0,1

其他选择符包括全局选择符*,加0,0,0,0。相当于没加,不过这也是一种specificity,后面会解释。

按这些规则将数字串逐位相加,就得到最终计算得的specificity,然后在比较取舍时按照从左到右的顺序逐位比较。

举一些例子吧:

ExampleSourceCode

h1{color:red;} 
 
bodyh1{color:green;} 
——后者胜出 
h2.grape{color:purple;} 
 
h2{color:silver;} 
——前者胜出 
html>bodytabletr[id="totals"]tdul>li{color:maroon;} 
 
li#answer{color:navy;} 
——后者胜

除了specificity还有一些其他规则

文内的样式优先级为1,0,0,0,所以始终高于外部定义。这里文内样式指形如<divstyle=”color:red”>blah</div>的样式,而外部定义指经由<link>或<style>标签定义的规则。

有!important声明的规则高于一切。

如果!important声明冲突,则比较优先权。

如果优先权一样,则按照在源码中出现的顺序决定,后来者居上。

由继承而得到的样式没有specificity的计算,它低于一切其他规则(比如全局选择符*定义的规则)。

关于经由@import载入的外部样式,由于@import必须出现在所有其他规则定义之前(如不是,则浏览器应该忽略之),所以按照后来居上原则,一般优先权冲突时是占下风的。

这里需要提一下IE,IE是可以识别位置错误的@import的,但无论@import在什么地方,它都认为是位于所有其他规则定义之前的,这可能会引发一些误会。所以优先权问题虽然看起来简单,但其背后还是有蛮复杂的机制的,需要多多留意。

转载自:http://blog.sina.com.cn/s/blog_57e7d45a0100ybxk.html

时间: 2024-11-10 00:18:14

CSS规则的执行顺序的相关文章

CSS规则的执行顺序(转)

你对CSS规则的执行顺序是否了解,这里和大家分享一下,若两条规则具有相同的权值.起源及特殊性,那在样式表中最后出现的规则优先. 1.CSS规则之特殊性 首先来看一下这个例子将会发生的情形: <style type="text/css"> .grape { color: Blue; } H1 { color: Red; } </style> <h1 class="grape"> Meerkat <em>Central &

CSS优先权与 执行顺序

css教程执行顺序与优先权的问题其实就是一个冲突解决的问题,当同一个元素(或内容)被css选择符选中时,就要按照优先权取舍不同的css规则,这其中涉及到的问题其实很多. 首先就是css规则的specificity(特殊性),css2.1有一套关于specificity的计算方式,用一个四位的数字串(css2是三位)来表示,最终specificity越高的规则越特殊,在优先级判定时也就越有优势.关于specificity的具体计算在各种情况下的数字加成有如下一般规则: 每个id选择符(#somei

CSS执行顺序与优先权的问题

核心提示:CSS执行顺序与优先权的问题其实就是一个冲突解决的问题,当同一个元素(或内容)被CSS选择符选中时,就要按照优先权取舍不同的CSS规则,这其中涉及到的问题其实很多. CSS执行顺序与优先权的问题其实就是一个冲突解决的问题,当同一个元素(或内容)被CSS选择符选中时,就要按照优先权取舍不同的CSS规则,这其中涉及到的问题其实很多. 首先就是CSS规则的specificity(特殊性),CSS2.1有一套关于specificity的计算方式,用一个四位的数字串(CSS2是三位)来表示,最终

详细讲解Linux系统Iptables规则执行顺序

预备知识(转): iptable有三种队列(表)规则,mangle queue, filter queue, nat queue. 1.The first is the mangle table which is responsible for the alteration of quality of service bits in the TCP header. 2.The second table is the filter queue which is responsible for pa

图片-Drools 如何解决规则依赖的执行顺序

问题描述 Drools 如何解决规则依赖的执行顺序 Agenda 中的规则集原本是随机执行的,现在需求是以规则的类型按照顺序先后执行,这样的解决方法有很多,不过在需求中有个棘手的问题就是规则的依赖,它影响了之前的逻辑,如下图: 规则依赖集中的规则可能会依赖规则集1,2或者3里的规则,这就影响了原来的流程,怎么样解决规则依赖的问题实现顺序执行规则集?不知道大家有什么好的方案没? 解决方案 http://www.iteye.com/problems/3183http://lixuaong.iteye

Div+CSS规则整理

一.           善用css缩写规则     /*注意上.右.下.左的书写顺序*/ 1.      关于边距(4边): 1px 2px 3px 4px (上.右.下.左) 1px 2px 3px    (省略的左等于右) 1px 2px         (省略的上等于下) 1px            (四边都相同)   2.      简化所有: */ body{margin:0}------------表示网页内所有元素的margin为0 #menu{ margin:0}------

Flash Actionscript脚本的执行顺序

脚本|执行 做了一下Flash脚本执行顺序状况的测试,总结出以下几条规则:1.先执行帧脚本,再执行该帧中的影片剪辑中帧脚本.2.同一帧中不同图层的帧脚本的执行顺序是从上层图层至下层图层;3.不同影片剪辑中的帧脚本执行顺序是根据其加载顺序来的.通常下在同一帧中不同图层内的影片剪辑脚本以自下层图层至上层图层;4.由于非脚本创建的影片剪辑最先加载,所以先执行非脚本创建的影片剪辑中的脚本,再执行由脚本创建的影片剪辑中的脚本,脚本创建的影片剪辑遵循"先创建/加载,先执行"的原则;5.非脚本创建的

Flash脚本的执行顺序

脚本|执行 做了一下Flash脚本执行顺序状况的测试,总结出以下几条规则:1.先执行帧脚本,再执行该帧中的影片剪辑中帧脚本.2.同一帧中不同图层的帧脚本的执行顺序是从上层图层至下层图层;3.不同影片剪辑中的帧脚本执行顺序是根据其加载顺序来的.通常下在同一帧中不同图层内的影片剪辑脚本以自下层图层至上层图层;4.由于非脚本创建的影片剪辑最先加载,所以先执行非脚本创建的影片剪辑中的脚本,再执行由脚本创建的影片剪辑中的脚本,脚本创建的影片剪辑遵循"先创建/加载,先执行"的原则;5.非脚本创建的

JMeter基础之--元件的作用域与执行顺序

前面有介绍过jmeter的元件类别,对于新手来说,jmeter的 元件是还是不少的,如果我们按照每一个元件的每一个参数的含义去学习,无疑会降低学习性能测试的热情,就算我们熟悉了所有元件以及元件上的参数了,我们也 不知道如何将其组合成我们想要描述的性能测试.另一方面,我们点击每个节点上的元件都会出现类似或相同的菜单,他们的层级关系是什么样的.究竟这个元件放 在哪个层级的哪个位置才达到我们意愿. 如何更快速的入门jmeter,个人建议通过录制脚本的方式,快速的了解一个性能测试应该包括的元件以及它们的