CSS优先权详解

详解|css优先权

发现很多朋友对 CSS 的优先权不甚了解,规则很简单。需要说明的一点,如果你的样式管理需要深层判断 CSS 的优先权,更应反思自己的 CSS 代码,是否合理?是否优化?

CSS2.1 中规定了关于 CSS 规则 Specificity(特异性)的计算方式,用一个四位的数字串(注:CSS2 中是用三位)来表示,最后以 Specificity 的高低判断 CSS 的优先权。

Specificity 具体的计算规则:

  • 元素的 style 样式属性,加 1,0,0,0。
  • 每个 ID 选择符(#id),加 0,1,0,0。
  • 每个 class 选择符(.class)、每个属性选择符(例 [attr=”"] )、每个伪类(例 :hover),加 0,0,1,0。
  • 每个元素或伪元素(例 :firstchild)等,加 0,0,0,1。
  • 其他选择符(例 全局选择符 *,子选择符 >),加 0,0,0,0。

最后逐位相加数字串,得到最终的 Specificity 值,按照从左到右的顺序逐位比较。

除了 Specificity 还有一些其他规则:

  • !important 声明的规则高于一切,如果 !important 声明冲突,则比较优先权。
  • 如果优先权一样,则按源码中“后来者居上”的原则。
  • 由继承而得到的样式属性不参与 specificity 的计算,低于一切其他规则(例 全局选择符 * )。

范例分析

h1 {color: red;}
/* 只有一个普通元素加成,结果是 0,0,0,1 */
body h1 {color: green;}
/* 两个普通元素加成,结果是 0,0,0,2 */
/*0,0,0,1 小于 0,0,0,2 ,后者胜出*/

h2.grape {color: purple;}
/* 一个普通元素、一个class选择符加成,结果是 0,0,1,1*/
h2 {color: silver;}
/*一个普通元素,结果是 0,0,0,1 */
/*0,0,1,1 大于 0,0,0,1 ,前者胜出*/

html > body table tr[id=”totals”] td ul > li {color: maroon;}
/* 7个普通元素、一个属性选择符、两个其他选择符(子选择符 >),结果是0,0,1,7 */
li#answer {color: navy;}
/* 一个ID选择符,一个普通选择符,结果是0,1,0,1 */
/*0,0,1,7 小于 0,1,0,1,后者胜出*/

节选 old9 的《CSS的优先权》(无法穿越 GFW)

时间: 2024-10-29 08:33:24

CSS优先权详解的相关文章

彻底理解浮动float CSS浮动详解 清除浮动的方法

原文:彻底理解浮动float CSS浮动详解 清除浮动的方法  我们把网页的常用的布局格式分为以下三种:   1.标准流.  所谓的标准流就是,行内元素自己单独一行,而块级元素是上下显示的. 以前我们学习的都是标准流.   注意:标准流使我们网页布局中最稳定的一种结构       2. 浮动流  使我们学习的脱离标准流的第一种方式.会影响我们标准流的排列.所以,我们布局的时候,能用标准流做的,就不用浮动做.       3. 定位流   定位流也是脱离标准流的一种模式.它完全脱离标准流,不会对标

CSS使用详解

css|详解 目录样式类型(List Style Type) 说明: 目录样式项属性指定目录项标记的类型,当目录样式图像值为none或当图像载入选项被关闭时使用.语法: list-style-type: <值>允许值: disc | circle | square | decimal | lower-roman | upper-roman | lower-alpha | upper-alpha | none初始值: disc适用于: 带有显示值的目录项元素向下兼容: 是 目录样式图像(Lis

CSS阴影详解

核心提示:设计师常常使用一些独特的字体效果和页面效果,阴影是其中一个,它可以让页面中的文字和元素具有立体的效果,从而被突出出来. 设计师常常使用一些独特的字体效果和页面效果,阴影是其中一个,它可以让页面中的文字和元素具有立体的效果,从而被突出出来.比如对于文字阴影,传统的方法可能需要将文字切出来,直接使用图片,如果考虑SEO和网站性能,还可能会使用CSS Sprites等技术将图片整合: h2{ background:url(sprites.png) no-repeat 0 0; font-si

CSS换行详解

普通文本段落的换行 案例说明:在实际应用中我们常遇到这样的问题,就是一段文本,有了明确的宽度,需要文本自动换行.(如下图) 案例分析:上面两个图,没有使用任何排版的CSS属性,也就是默认情况下,块元素里的文本,达到边缘以后会自动换行.但是这里有个特例:就是内容全部为英文字母(没有单词句子,没有词和词之间的空格),此时文本就不自动换行了(见下图) 特殊情况:有时候你写的东东,默认情况下并不自动换行,这多半是由于你在其他的CSS属性设置里,无意中关联了那个段话.比如你的 p 元素无意中有了 whit

IE6,IE7,IE8,Firefox兼容的css hack详解

已经发布过关于这CSS兼容的hack的文章不止一篇,可是有太多,都已经失效,再次发布,不想谈什么乱七八糟的理论,直接上实例!如下: IE浏览器都能识别"*" "\9";标准浏览器(如FF)不能识别"*": IE6能识别"_" "+" "#" "@", 同一属性有两个的只看后者 无论有没有 如果是两句它就能识别"!important"; IE7能识别

如何在 HTML 中应用 CSS基础详解

接下来用这个 index.html 将在下文讲解中用到. <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <h2>h2 tag</h2> <div class="class1">class1</div&

css position详解

正如positioniseverything,本文将主要讲述关于position的理解,力求让您看完本文后对position有着最全面的认识. position的四个属性值: relative absolute fixed static 下面分别讲述这四个属性.  代码如下 复制代码 <div id="parent">      <div id="sub1">sub1</id>      <div id="sub2

网站模板修改中常用到的CSS代码详解

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 在上一篇文章中,提到了一些修改网站模板中常用到的方法,工具.但其中也牵涉到不到关于CSS样式表的一些知识,对于这些知识,缺乏的还占大多数,今天我就将常用的一些CSS样式表语法整理一下,发出来给大家,希望对各位站长朋友修改网站模板的时候有一些帮助.如果你还没阅读过上一篇文章,请先移步至<关于淘客模板修改的一些心得总结>. CSS样式

CSS中expression怎么用? CSS expression详解

什么是CSS expression? IE5及其以后版本支持在CSS中使用expression,用来把CSS属性和Javascript脚本关联起来,这里的CSS属性可以是元素固有的属性,也可以是自定义属性.就是说CSS属性后面可以是一段Javascript表达式,CSS属性的值等于Javascript表达式计算的结果. 在表达式中可以直接引用元素自身的属性和方法,也可以使用其他浏览器对象.这个表达式就好像是在这个元素的一个成员函数中一样. 是不是感觉上面的文字有点晦涩?没有关系,你只需要知道:我