CSS选择器优先性以及权重计算
样式根据引入和声明需要分开介绍,一般来说分为引入样式优先级和声明样式优先级。
一、引入样式优先级
引入样式优先级一般是在外部样式、内部样式、内联样式之间应用同一个样式的情况是使用, 优先级如下:
外部样式 | 内部样式 < 内联样式
外部样式和内部样式,最后出现的优先级最高。
二、样式声明优先级
a.选择器类型
①、ID #id
②、class .class
③、标签 p
④、通用 *
⑤、属性 [type="text"]
⑥、伪类 :hover
⑦、伪元素 ::first-line
⑧、子选择器、相邻选择器
b、选择器所占权重
①:代表内联样式,如: style=””,权值为1000。
②:代表ID选择器,如:#content,权值为100。
③:代表类,伪类和属性选择器,如.content,权值为10。
④:代表类型选择器和伪元素选择器,如div p,权值为1。
⑤:通配符、子选择器、相邻选择器等的。如*、>、+,权值为0。
⑥:继承的样式没有权值。
权值计算示例c、!important
!important是选择器优先级比较特殊的存在。
!important 的作用是提升优先级,换句话说。加了这句的样式的优先级是最高的(比内联样式的优先级还高)。
加了!important的样式如果要覆盖的话,只能在后面继续加important,所以一般不建议使用。
table td {height:50px!important;}
.myTable td{height:50px!important;}
#myTable td{height:50px!important;} //生效
d、就近原则
当权值相同的情况下怎么办呢,这个时候就要看就近原则了。
css有4种引入方式,除了行内式以外,后设置的值会覆盖前面设置的, 因为剩余三种引入方式都是在头部引入,后设置也就离目标属性更近, 也就是就近原则了。
e、基于形式的优先级
优先级是基于选择器的形式进行计算的。在下面的例子中,尽管选择器*[id="foo"] 选择了一个ID,但是它还是作为一个属性选择器来计算自身的优先级。
*#foo{color:green;} //生效
*[id="foo"] {color:purple;}
f、无视DOM树的距离
body h1 {color:green;}
html h1 {color:purple;} //生效