原文摘抄自 CSS权威指南(第三版):
第 1 部分:基础准备知识
每个合法的文档都会生成一个文档树,从而能根据元素的祖先,属性,兄弟元素等创建选择器来选择元素。有了这个结构树,选择器才能起作用,这也是CSS继承的核心。继承是从一个元素向其后代元素传递属性值所采用的机制。确定应当向一个元素应用哪些值时,用户代理不仅要考虑继承,还要考虑声明的特殊性,另外需要考虑声明本身的来源,这个过程称为层叠。
1.1 特殊性
每个选择器都有特殊性,对于每个规则,用户代理会计算选择器的特殊性,并将这个特殊性附加到规则中的各个声明。若一个元素有两个或多个冲突的属性声明,那么有最高特殊性的声明将胜出。选择器的特殊性由选择器本身的组件确定。特殊性表述分为4个部分,如0,0,0,0。一个选择器的具体特殊性如下确定:
1)对于选择器给定的各个ID属性值,加0,1,0,0
2)对于选择器给定的各个类属性值,属性选择或伪类,加0,0,1,0
3)对于选择器给定的各个元素和伪元素,加0,0,0,1
4)结合符和通配选择器对特殊性没有任何贡献。其特殊性为0,0,0,0,但这与根本没有特殊性(继承没有特殊性)有本质区别。
5)一般地,第一个0是为内联样式表声明保留的,它比所有其他声明的特殊性都高。其特殊性为1,0,0,0。(为内联样式表声明保留一位是CSS2.1才加上的)
1.2 重要性
有时某个声明可能很重要,超过了所有其他声明,CSS2.1称之为重要声明,并允许在这些声明的结束分号之前插入!important来标志。标志为!important的声明并没有特殊的特殊性值,