CSS优先级的读法-详解

2016-02-19 19:50 3 1 收藏

关注图老师设计创意栏目可以让大家能更好的了解电脑,知道有关于电脑的更多有趣教程,今天给大家分享CSS优先级的读法-详解教程,希望对大家能有一点小小的帮助。

【 tulaoshi.com - Web开发 】

CSS优先级的读法:

CSS优先级包含四个级别(文内选择符,ID选择符,Class选择符,元素选择符)以及各级别出现的次数。根据这四个级别出现的次数计算得到CSS的优先级。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

最近看到篇对这个东西有比较好的解释的blog,因此转载了大部分的内容过来供本人学习,也供大家学习。

以下是引用:

对优先级的读法,应该是以“组”来分,这个组之间相互独立,从左到右进行对比。它们成组出现,以逗号分隔。

  selector( a , b , c , d )
   compare: ↑ , ↑ , ↑ , ↑
  selector( a , b , c , d )正如w3c.org中原文所示,分为a,b,c,d四组,全为正整娄,默认为0,对应于不同的选择器结构和组成形式。在选择器之间的优先级进行对比时,从左到右1对1对比,当比出有大者时即可停止比较。

 li.red.level  {}  /* a=0 b=0 c=2 d=1 - specificity = 0 , 0 , 2 , 1  */
       /*compare                                       ↑ , ↑ , √      */
 h1 + *[rel=up]{}  /* a=0 b=0 c=1 d=1 - specificity = 0 , 0 , 1 , 1  */
       /*compare                                       ↑ , ↑ , ↑ , √  */
 ul ol li.red  {}  /* a=0 b=0 c=1 d=3 - specificity = 0 , 0 , 1 , 3  */
       /*compare                                       ↑ , ↑ , √      */
 #x34y         {}  /* a=0 b=1 c=0 d=0 - specificity = 0 , 1 , 0 , 0  */
       /*compare                                       ↑ , √          */
 style=""          /* a=1 b=0 c=0 d=0 - specificity = 1 , 0 , 0 , 0  */(上表中,↑表示还要进行比较,√表示从此处已得到了结果)

再有,只要正确书写,仅从优先级中大概知道选择器结构形式了,如:

1,0,0,0表示是元素内的style;

0,2,1,1表示是一个由两个ID选择器,1个类或伪类或属性选择器,以及一个元素选择器组成的选择器。

CSS优先级规则的细节:
在纠正读法后,才能开始讲详细的规则:

a组数值只有把CSS写进style属性时才会为1,否则为0.写进style的样式声明其实不算是个选择器,所以这里面的b,c,d组值均为0,只有真正的选择器才会有b,c,d组值。
b组数值决定于ID选择器#ID,有多少个ID选择器,并会进行此组数值累加;
c组数值决定于类、伪类和属性选择符,并会进行该组数值累加;
d组数值决定于元素名,即元素选择器,并会进行该组数值累加;
注意,这四组数值分别对应于不同类型的选择器,互不影响,根据读法法则进行比较。

(这里没有讨论到!important,就近原则和继承,也没有实例代码,欢迎大家共同讨论!)

下面是列子:(CSS优先级问题)

CSS优先级包含四个级别(文内选择符,ID选择符,Class选择符,元素选择符)以及各级别出现的次数。根据这四个级别出现的次数计算得到CSS的优先级。
CSS优先级的计算规则如下:
* 页面中定义的样式,加1,0,0,0
* 每个ID选择符(如 #id),加0,1,0,0
* 每个Class选择符(如 .class)、每个属性选择符(如 [attribute=])、每个伪类(如 :hover)加0,0,1,0
* 每个元素选择符(如p)或伪元素选择符(如 :firstchild)等,加0,0,0,1
然后,将这四个数字分别累加,就得到每个CSS定义的优先级的值,
然后从左到右逐位比较大小,数字大的CSS样式的优先级就高。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

例子:
css文件或style中如下定义:
1. h1 {color: red;}
/* 一个元素选择符,结果是0,0,0,1 */
2. body h1 {color: green;}
/* 两个元素选择符,结果是 0,0,0,2 */
3. h2.grape {color: purple;}
/* 一个元素选择符、一个Class选择符,结果是 0,0,1,1*/
4. li#answer {color: navy;}
/* 一个元素选择符,一个ID选择符,结果是0,1,0,1 */
元素的style属性中如下定义:
h1 {color: blue;}
/* 页面中定义,一个元素选择符,结果是1,0,0,1*/

注解:这里把所有的数字都进行对位叠加,(0,0,0,1)+(0,0,0,2)+(0,0,1,1)+(0,1,0,1)+(1,0,0,1)=(1,1,1,6)

如此以来,h1元素的颜色是蓝色。

注意:
1、!important声明的样式优先级最高,如果冲突再进行计算。
2、如果优先级相同,则选择最后出现的样式。
3、继承得到的样式的优先级最低。

资料引用:http://www.knowsky.com/441104.html

来源:https://www.tulaoshi.com/n/20160219/1621936.html

延伸阅读
标签: Web开发
正则表达式从左到右进行计算,并遵循优先级顺序,这与算术表达式非常类似。   运算符 下表从最高到最低说明了各种正则表达式运算符的优先级顺序: 运算符 说明 \ 转义符 (), (?:), (?=), [] 括号和中括号 *, +, ?, {n}, {n,}, {n,m} 限定符 ^, $, \任何元字符、任何字符 定位点和序列 | 替换 ...
标签: Web开发
可以看出直接重定义标签样式的有效性是最低的, 其次是用"."定义的伪类, 再次是用重定义标签加伪类的方式(类似于H2.myclass{color:blue}的写法),级别最高的就是用id定义的CSS样式-- HTML HEAD STYLE H1{color:red; } .myclass{color:green} H2.myclass{color:blue} #myid{color:brown} /STYLE /HEAD BODY H1这是红色的一号标题。/H1 ...
import java.util.*; /**  * pTitle: 提高线程优先级/p  * pDescription: 通过修改线程的优先级,是线程获得优先处理。/p  * pCopyright: Copyright (c) 2003/p  * pFilename: upPRIThread.java/p  * @version 1.0  */ public class upPRIThread {  //主方法  public static void main(String[] ...
标签: Java JAVA基础
限制线程优先级和调度 Java 线程模型涉及可以动态更改的线程优先级。本质上,线程的优先级是从 1 到 10 之间的一个数字,数字越大表明任务越紧急。JVM 标准首先调用优先级较高的线程,然后才调用优先级较低的线程。但是,该标准对具有相同优先级的线程的处理是随机的。如何处理这些线程取决于基层的操作系统策略。在某些...
如何为win7设置网络优先级?   什么叫做网络优先级呢?咱们这里先说明一下,大家在使用win7旗舰版下载的时候,可能可以同时使用有线网络和无线网络两种,那么这个时候,就会有一个选择的问题,就有一个先后的问题,那么这个问tulaoShi.com题就是网络优先级了。也就是说,咱们让win7旗舰版优先选择哪个网络。那么这个网络优先级在win7旗...

经验教程

376

收藏

96
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部