• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
初漠
此年,做不美却善良的人。此年,做平静少厌烦的人。不争,不骄,不解释,不抱怨,静默如初!
博客园    首页    新随笔    联系   管理    订阅  订阅
权重和层叠规则决定了CSS样式优先级

一、基本的优先级规则 

比较同一级别的个数,数量多的优先级高,如果相同即比较下一级别的个数,至于各级别的优先级如下: 

important > 内联 > ID > 类 > 标签 | 伪类 | 属性选择 > 伪对象 > 通配符 > 继承 

二、CSS权重规则 

在《页面重构中的模块化设计》中提到,影响CSS样式权重,有两个重要因素: 

A:样式的优先级跟样式定义的顺序有关 

B:权值的大小跟选择器的类型和数量有关 

一般来说,在同一个CSS文件中,如果有两个同名的样式,则后定义的会覆盖先定义的。选择器类型的优先级见(一)。 

那么,CSS的权重是怎么算的呢? 

一个selector的权重表示方式:0.0.0.0,按照计算规则给每位填充数字,对应位置相等,则比较下一位。 

权重的计算规则如下:(为方便,用A.B.C.D代替各位置的值) 

1、内嵌样式:A=1,B=C=D=0(即1.0.0.0) 

2、ID样式:selector中带几个ID,第2位就加几个1 如#header{color:red},就是A=C=D=0,B=1(即0.1.0.0) 

3、类,伪类,以及属性的个数就是第三位的值: 

.a.b[type="text"]:hover{},选择器中有2个类,1个属性,1个伪类,所以它的第3位为4, A=B=D=0,C=4,(即0.0.4.0) 

4、伪元素和标签元素的个数就是第四位的值 

p:first-letter,有一个标签元素p和伪元素first-letter,值为2,A=B=C=0,D=2(即0.0.0.2) 

5、通配符和继承得到的CSS属性对权重没有影响 

三、几个示例 

针对以上,看以下几个示例 

1、.a .b .c {color:red;} //0.0.3.0 说明:只有三个类 

2、*{…} //0.0.0.0 说明:通配符对权重没有影响 

3、.a .b a {color:green} //0.0.2.1 说明:两个类和一个标签 

4、#hid {color:black;} //0.1.0.0 说明:只有一个ID

#redP p {                      /* 权值 = 100+1=101 */ 
    color:#F00;  
} 

#redP .red em {            /* 权值 = 100+10+1=111 */ 
    color:#00F;
} 

#redP p span em {         /* 权值 = 100+1+1+1=103 */ 
    color:#FF0;
} 

 

posted on 2016-04-27 11:20  初漠  阅读(263)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3