CSS中选择器优先级的权重计算

先看一段代码,如下:

``` <style>
a{
color: red;
}
#box a{
color: green;
}
[class="box"] a{
color: gold;
}
.box a{
color: brown;
}
p a{
color: yellow;
}
</style>
<p id='box' class="box"> <a>hello</a></p>
```

请问上面代码中,a标签中文字的最终颜色是什么?知道CSS选择器优先级规则的童鞋都知道,在CSS中优先级顺序如下:

ID选择器 > class选择器 > tag选择器
所以,上面代码的颜色,大家都会选择 #box a{ color: green;} 绿色。这个答案没错。 如果我们把这一条规则从style标签中移除呢,那么a标签文字的颜色应该是哪个? brown? or gold? Which one?

答案是: brown。

a{color:red} 和 p a {color : yellow;}的优先级肯定没有其它两项高,不需要考虑。在 [class="box"] a和.box a中,后者的顺序比较考后,会覆盖之前的样式,所以颜色是brown。

这也许会是一些人的答案,不能不说不对。那么如果这中情况下呢?

``` <style>
#box{
color: green;
}
</style>
<p id='box' class="box" style="color: red;"> hello </p>
```

不用说,大家都知道会使用style="color: red;"属性定义的颜色,是red。

那么,css所遵从的具体规则是什么呢?

权重计算规则

  1. 第零等:!important, 大过了其它任何设置。
  2. 第一等:代表内联样式,如: style=””,权值为1000。
  3. 第二等:代表ID选择器,如:#content,权值为0100。
  4. 第三等:代表类,伪类和属性选择器,如.content,权值为0010。
  5. 第四等:代表类型选择器和伪元素选择器,如div p,权值为0001。
  6. 第五等:通配符、子选择器、相邻选择器等的。如*、>、+,权值为0000。
  7. 第六等:继承的样式没有权值。

计算规则

!important 和内联样式style都属于不讲理的那种,

  • 只要存在 !important,!important便具有最高优先级;
  • 如果不存在 !important,存在style,那么style便具有最高优先级;
  • 剩下的 “ID” 、 “类,伪类和属性” 、 “元素类型和伪元素“ 分别对应 权重值(0-a-b-c)中的 a/b/c;计算方法如下:

* /* a=0 b=0 c=0 -&gt; specificity = 0-0-0-0 */
LI /* a=0 b=0 c=1 -&gt; specificity = 0-0-0-1 */
UL LI /* a=0 b=0 c=2 -&gt; specificity = 0-0-0-2 */
UL OL+LI /* a=0 b=0 c=3 -&gt; specificity = 0-0-0-3 */
H1 + *[REL=up] /* a=0 b=1 c=1 -&gt; specificity = 0-0-1-1 */
UL OL LI.red /* a=0 b=1 c=3 -&gt; specificity = 0-0-1-3 */
LI.red.level /* a=0 b=2 c=1 -&gt; specificity = 0-0-2-1 */
#x34y /* a=1 b=0 c=0 -&gt; specificity = 0-1-0-0 */
#s12:not(FOO) /* a=1 b=0 c=1 -&gt; specificity = 0-1-0-1 */
  • 继承的样式没有权值,比其它任何类型的权值都低。

【参考资料】

CSS selector specificity

CSS中选择器优先级的权重计算的更多相关文章

  1. CSS中选择器优先级顺序实战讲解

    原文:CSS中选择器优先级顺序实战讲解 我们有些程序猿在给一个元素(比如div)应用样式的时候,会有一些疑问,为什么我写在后面的样式不能覆盖前面的样式呢,不是说CSS是层叠样式表吗? 如果你在开发中也 ...

  2. CSS中选择器优先级与!important权重使用

    CSS中的选择器优先级与!important权重使用 .class选择器要高于标签选择器. #id选择器要高于.class选择器. 标签选择器是优先级最低的选择器. !important的属性它的权重 ...

  3. 【CSS】选择器优先级

    CSS的选择器优先级的权重 在 Selectors Level 3 规范中,一个选择器的优先级(权重)由依次串联的a.b.c三个标记来计算 a: ID选择器 如#header b: class选择器如 ...

  4. 关于css中选择器的小归纳(一)

    关于css中选择器的小归纳 一.基本选择器 基本选择器是我们平常用到的最多的也是最便捷的选择器,其中有元素选择器(类似于a,div,body,ul),类选择器(我们在HTML标签里面为其添加的clas ...

  5. CSS(二)- 选择器 - 一定要搞懂的选择器优先级和权重问题

    css的优先级之前一直没怎么注意没当回事,总以为对同一元素靠后的渲染会覆盖前面的渲染,要是覆盖不了那就来个!important嘛.直到我那在学前端基础的后端伙伴拿一个问题问住了我,我才意识到这是重点中 ...

  6. 层叠机制和继承的概念以及CSS中选择器的优先级

    层叠机制: 一个元素的某个特定的样式属性可能来自行间的style属性.内联样式表或者外部引入的样式表,以及浏览器自定义的样式,还有就是继承自父元素的样式,但是最终只会选择其中的某一个来表示,这个选择的 ...

  7. CSS样式选择器优先级

    CSS样式选择器分为4个等级,a.b.c.d,可以以这四种等级为依据确定CSS选择器的优先级. 1.如果样式是行内样式(通过Style=””定义),那么a=12.b为ID选择器的总数3.c为Class ...

  8. 【CSS系列-选择器优先级总结】

    转:http://www.cnblogs.com/dolphinX/p/3511300.html 容易被忽略CSS特性   CSS初学感觉很简单,但随着学习的深入才感觉CSS的水由多深,平常总会遇到各 ...

  9. css中选择器的使用

    css是英文Cascading Style Sheets的缩写.它是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言.我们再将html比喻 ...

随机推荐

  1. tcpip学习

    http://www.cnblogs.com/ggjucheng/archive/2012/08/18/2645324.html

  2. MySQL命名、设计及使用规范《MySQL命名、设计及使用规范》

    数据库环境 dev:开发环境,开发可读写,可修改表结构.开发人员可以修改表结构,可以随意修改其中的数据但是需要保证不影响其他开发同事. qa:测试环境,开发可读写,开发人员可以通过工具修改表结构. s ...

  3. Seaside HDU 3665 【Dijkstra】

    Problem Description XiaoY is living in a big city, there are N towns in it and some towns near the s ...

  4. BZOJ 3037 创世纪 树形DP

    题目大意:给定一张有向图,每一个点有且仅有一条出边,要求若一个点x扔下去,至少存在一个保留的点y,y的出边指向x,求最多扔下去多少个点 首先原题的意思就是支配关系 我们反向考虑 求最少保留的点 要求一 ...

  5. APP漏洞自动化扫描专业评测报告(下篇)

    上篇.中篇回顾:通过收费情况.样本测试后的扫描时间.漏洞项对比以及扫描能力这几个方面对阿里聚安全[1].360App漏洞扫描[2].腾讯金刚审计系统[3].百度移动云测试中心[4]以及AppRisk ...

  6. Linux环境中Apache也就是httpd服务的启动,查看版本等操作

    本机是虚拟机,装的redhat Linux版本,默认是安装了httpd的 打开terminal 切换到root用户 cd到/etc/rc.d/init.d/目录,并列出该目录下的所有文件,看看是否有h ...

  7. Tomcat启动时项目反复载入,导致资源初始化两次的问题

    近期在项目开发測试的时候,发现Tomcat启动时项目反复载入,导致资源初始化两次的问题  导致该问题的解决办法: 例如以下图:在Eclipse中将Server Locations设置为"Us ...

  8. Hexo简介

    Hexo是什么 Hexo(中文官方网站)是一个快速, 简洁且高效的博客框架. 让上百个页面在几秒内瞬间完成渲染. Hexo支持Github Flavored Markdown的所有功能, 甚至可以整合 ...

  9. Android进程回收机制LMK(Low Memory Killer)【转】

    本文转载自:http://www.cnblogs.com/wytiger/p/5744752.html 熟悉Android系统的童鞋都知道,系统出于体验和性能上的考虑,app在退到后台时系统并不会真正 ...

  10. Linux - 进程管理,ps与top

    一个运行的程序,可能有多个进程. PID进程ID. UID启动进程的ID. 进程所属组GID. 进程的状态R运行.S睡眠.Z僵尸. 父进程管理子进程,父进程终止的时候子进程也会终止. 常用的组合为: ...