CSS选择器:
CSS选择器有:id选择器(#myid)、类选择器(.myclassname)、标签选择器(div,h1,p)、相邻选择器(h1+p)、子选择器(ul>li)、后代选择器(li a)、通配符选择器(*)、属性选择器(a[rel="exterbal"])、伪类选择器(a:hover,li:nth-child)、伪元素选择器(p::first-letter)
相邻选择器:选择紧接在另一个元素后的元素,并且二者有相同的父元素。
CSS特殊性:
选择器的特殊性由选择器本身的组建确定。特殊性值表述为4个部分,如:0,0,0,0。一个选择器的具体特殊性如下确定:
1.对于选择器中给定的各个ID属性值,加0,1,0,0。
2.对于选择器中给定的各个类属性值、属性选择或者伪类,加0,0,1,0。
3.对于选择器中给定的各个元素和伪元素(CSS2.1指出,伪元素有特殊性),加0,0,0,1。
4.结合符和通配选择器对特殊性没有任何贡献。
note:通配选择器的特殊行为0,0,0,0。
eg:div p {color: green} /*0,0,0,2*/
body * strong /*0,0,0,2*/
结合符则根本没有特殊性,甚至连0特殊性都没有。
5.CSS2.1新增,第一个0是为内联样式声明保留的,即内联声明的特殊性是:1,0,0,0。
eg:h1#meadow {color:black;}
<h1 id="meadow" style="color:green;">The Meadow Party</h1>
由于内联声明的特殊性最高,h1元素的文本是绿色。
note:ID和属性选择性的特殊性(ID选择器贡献100,id属性选择器贡献10)
ID选择器和指定id属性的选择器在特殊性上有所不同:
html>body table tr[id="totals"] td ul>li {color: maroon;} /*0,0,1,7*/
li#answer {color:navy;} /*0,1,0,1 (winner)*/
#meadow {color: blue;} /*0,1,0,0*/
*[id="meadow"] {color:red} /*0,0,1,0*/
6.重要性:
重要声明:在声明结束分号之前插入!important来标志。如果希望把两个声明都标志为重要,则每个声明都需要自己的!important标志。如果一个属性的值包含多个关键词,如font,必须将!important标志放在声明的最后。
标志为!important声明并没有特殊的特殊性值,不过要与非重要声明分开考虑。所有!important声明会分组在一起,重要声明的特殊性冲突会在重要声明内部解决。如果一个重要声明和非重要声明冲突,胜出的总是重要声明。
p.light {color: yellow; font: smaller Times, serif !important; }
CSS优先级:
1.按照显示权重对应用到该元素的所有声明排序。!important声明的样式优先级最高,如果冲突再进行计算;
2.按照特殊性对应用到给定元素的所有声明排序。有较高特殊性的元素权重大于较低特殊性的元素;
3.按照出现顺序对应用到给定元素的所有声明排序。一个声明在样式表或文档中越后出现,它的权重就越大。(如果样式表中有导入的样式表,一般认为出现在导入样式表中的声明在前,主样式表中的所有声明在后)
4.继承的值根本没有特殊性,甚至连0特殊性都没有。因此继承得到的样式的优先级最低。