重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
CSS选择器、优先级与匹配原理
成都创新互联是一家专业提供罗定企业网站建设,专注与成都做网站、成都网站制作、成都外贸网站建设、成都h5网站建设、小程序制作等业务。10年已为罗定众多企业、政府机构等服务。创新互联专业网站设计公司优惠进行中。
1.id 选择器(#myid)2.类选择器(.myclassname)3.标签选择器(div,h1,p)4.相邻选择器(h1+p)5.子选择器(ul li)6.后代选择器(li a)7.通配符选择器(*)8.属性选择器(a[rel="external"])9.伪类选择器(a:hover,li:nth-child)
其中ID选择器的效率是最高,而伪类选择器的效率则是最低
CSS的权重
1. 通配选择符的权值 0,0,0,0
2. 标签的权值为 0,0,0,1
3. 类的权值为 0,0,1,0
4. 属性选择的权值为 0,0,1,0
5. 伪类选择的权值为 0,0,1,0
6. 伪对象选择的权值为 0,0,0,1
7. ID的权值为 0,1,0,0
8. important的权值为最高 1,0,0,0
使用规则: 选择器的权值加到一起,大的优先;如果权值相同,后定义的优先 。
从上面我们可以得出两个关键的因素:
1. 权值的大小跟选择器的类型和数量有关
2. 样式的优先级跟样式的定义顺序有关
CSS选择器的权重与优先规则
我们在使用CSS对网页元素定义样式时经常会遇到这种情况:要对一般元素应用一般样式,然后在更特殊的元素上覆盖它们。那么我们怎么样来保证我们所新定义的元素样式能覆盖目标元素上原有的样式呢?
在CSS中,会根据选择器的特殊性来决定所定义的样式规则的次序,具有更特殊选择器的规则优先于具有一般选择器的规则,如果两个规则的特殊性相同,那么后定义的规则优先。
那么,又怎么来计算选择器的特殊性呢?下面这张图介绍了特殊性的计算方法:
我们把特殊性分为4个等级,每个等级代表一类选择器,每个等级的值为其所代表的选择器的个数乘以这一等级的权值,最后把所有等级的值相加得出选择器的特殊值。
4个等级的定义如下:
第一等:代表内联样式,如: style=””,权值为1000。
第二等:代表ID选择器,如:#content,权值为100。
第三等:代表类,伪类和属性选择器,如.content,权值为10。
第四等:代表类型选择器和伪元素选择器,如div p,权值为1。
例如上图为例,其中#NAV为二等选择器,.ACTIVE为三等选择器,UL、LI和A为四等选择器。则整个选择器表达式的特殊性的值为1*100+1*10+3*1=113
下面是一些计算示例:
注意:通用选择器(*),子选择器()和相邻同胞选择器(+)并不在这四个等级中,所以他们的权值都为0。
理解选择器的特殊性很重要,特别是在修复bug的时候,因为你需要了解哪些规则优先及其原因。
如果你遇到了似乎没有起作用的CSS规则,很可能是出现了特殊性冲突。请在你的选择器中添加他的一个父元素的ID,从而提高它的特殊性。如果这能解决问题,就说明样式表中其他地方很可能有更特殊的规则,它覆盖了你的规则。如果是这种情况,你可能需要检查代码,解决特殊性冲突,让代码尽可能简洁。
1、代表内联样式,如: style=””,权值为1000。
2、代表ID选择器,如:#content,权值为100。
3、代表类,伪类和属性选择器,如.content,权值为10。
4、代表类型(元素)选择器和伪元素选择器,如div p,权值为1。
按照CSS代码的执行先后顺序。如果有重复的规则,按照后执行的定义。最终规则是多个定义规则的综合。重点:高级规则定义对于不同表格的文字样式定义。(不同表格使用不同ID、使用类样式定义)一页中的多种超级链接样式定义。多个相同规则不同对象的CSS共同定义。对于同一对象定义的多种CSS方式考虑哪种更科学。
正常情况下是就近原则,css从上直下,如果相同会采用最后的css,如果是css3就要看情况了。
比如:如果设置了【:first-child或者:last-child,:nth-child()】等这种选择器,会采用选择器的css;如果设置了【!important】会采用有这个的css,就算是写在div里面的也没有这个级别高(但不是万能的,有的可以设置有的不行,列出来太多了,记着也麻烦,最简单的记忆方式就是写完在浏览器中F12,如果划横线就是不好使)
width:10px !important;意思是设置成最高级别,不管先后都会采用这个css,如果有两个这种代码会采用最后一个。
以下是优先级设置顺序:
1、width:10px;
2、width:10px !important;
3、:first-child{width:10px;}
4、:first-child{width:10px !important;}
优先级顺序为4231,如果是同级别情况下会就近选择,就是选择最后一个
1. 内联样式表的权值最高 1000
2. ID 选择器的权值为 100
3. Class 类选择器的权值为 10
4. HTML 标签选择器的权值为 1
CSS 优先级法则:
A 选择器都有一个权值,权值越大越优先
B 当权值相等时,后出现的样式表设置要优于先出现的样式表设置
C 创作者的规则高于浏览者:即网页编写者设置的CSS 样式的优先权高于浏览器所设置的样式
D 继承的CSS 样式不如后来指定的CSS 样式
E 在同一组属性设置中标有“!important”规则的优先级最大
这是规定好的,自然不能打破