选择器的特异性(Specificity)
当一个元素有两个或多个相互冲突的属性声明时,具有最高特异性的属性声明将胜出。
选择器的特异性值可以表示为四个部分0,0,0,0
,实际如何确定 如下
- 每一个内联声明,
1,0,0,0
- 每一个 ID 选择器,加
0,1,0,0
- 每一个类选择器、属性选择器、伪类选择器,加
0,0,1,0
- 每一个元素选择器、伪元素选择器,加
0,0,0,1
- 组合符和通配选择器不影响特异性值
1 | h1 {color: red;} /*specificity = 0,0,0,1 */ |
一旦选择器的特异性被确定,特异性值将付给它所有的相关声明。
1
2
3
4
5
6
7
h1, h2.section {color: silver; background: black;}
h1 {color:silver;} /* 0,0,0,1 */
h2 {background:black;} /* 0,0,0,1 */
h1.section {color:silver;} /* 0,0,1,1 */
h2.section {background: black;} /*0,0,1,1*/
!important
声明比所有的特异性值都高
继承(Inheritance)
当元素的一个继承属性没有指定值时,则取父元素的同属性的计算值.
许多属性不具继承性;例如:
border
,盒模型属性包括margin,padding, background, border
。继承属性的值完全没有特异性。
1
2
3
4* {color: gray;}
h1#page-title {color: black;}
<h1 id="page-title"> Meerkat <em>Central</em> </h1>由于通配选择器适用于所有元素,并且具有特异性
0,0,0,0
,因此颜色声明的灰色胜过了继承的黑色值。后者根本没有特异性。通配选择器具有短路继承的效果
层叠/级联(Cascade)
层叠样式表(Cascading Style Sheets):CSS 基于一种使样式层叠在一起的方法,它是通过将继承和特异性与一些规则相结合而实现的。
层叠规则
- 查找包含与给定元素匹配的选择器的所有规则
- 按
显示权重
对声明排序,!import
比其它无!important
规则权重高。 - 按
来源
对声明排序,三个基本来源:作者、读者、用户代理。通常情况下,作者的样式胜过读者,当读者!important
样式比其它都强,包括作者的!important
样式。 (以下权重由大至小)- 读者 important 声明
- 作者 important 声明
- 作者 正常 声明
- 读者 正常 声明
- 用户代理(浏览器) 默认 声明
- 按
特异性值
排序 - 按
声明的顺序
排序@import
引入的外部样式,排在文档内部样式的前面.可视为在@import
的地方,把外部样式表粘贴于此。1
2@import url(basic.css);
h1 {color: blue;}a
链接样式的顺序link-visited-focus-hover-active
.为什么?
一个链可能同时处于多个状态,即同时匹配多个伪类。:link
和visited
是常态效果,:hover
和:active
是瞬时效果- 未点击链接前,匹配
:link
伪类,鼠标悬停/点击时,链接同时匹配:link
和:hover
/:active
。在同时匹配多个伪类时,后出现的伪类样式会覆盖前面的,所有:link
必须写在:hover
、:active
之前,才能展示链接悬浮、激活样式。 :hover
和:active
顺序?假若:hover
放在:active
后面,当点击链接的一瞬间,实际长匹配了:active
同时也匹配了:hover
伪类,:hover
在后面就覆盖了:active
样式,所有就无法展示:active
样式了。故:active
在:hover
之后。:link
和:visited
两个伪类之间顺序无所谓,因为它们不能同时匹配。
- 未点击链接前,匹配