css层叠规则最详细教程
这是小指根据书籍和资料自行总结的方法,看完你肯定比一般人更了解css层叠规则!!!
css翻译为层叠样式表,层叠是浏览器最终确定一个元素属性的方式。层叠机制如何起作用呢?
以页面上一个<h1>元素的color属性为例,浏览器确认的流程:
第一步:收集所有样式表
样式表包含Web页面作者定义的样式表,读者自行增加的样式表和浏览器的默认样式表。
第二步:找到所有匹配的声明
检查所有样式表,找出所有匹配<h1>元素而且包含color属性的规则。
第三步:对所有匹配的规则排序
按重要性从高到低排序为:Web页面作者定义规则 > 读者自定义规则 > 浏览器默认规则。
即Web页面作者定义规则最优先,读者自定义规则又优先于浏览器默认规则。
第四步:按特定性对所有声明排序(重要!)
CSS选择器的权重顺序:
important > 内联 > ID > 类 | 伪类 | 属性选择 > 标签 > 伪对象 > 继承 > 通配符
将其数字化,初始化权重值为00000。
最高位代表权重越大,最低位代表权重越低。
选择器属性 | important | 内联 | id | 类、伪类、属性选择 | 标签、伪类元素 |
增加值 | 10000 | 1000 | 100 | 10 | 1 |
这个表格包含了所有计算方法,下面以例子简单解释一下:
HTML代码:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Example For CSS</title> <style type="text/css"> #main-div h1 {color: red !important;} </style> <link type="text/css" rel="stylesheet" href="style.css"/> </head> <body> <div id="main-div" class="main-content"> <div id="sub-div" class="sub-content"> <h1 id="first-heading" style="color: maroon;">Example for css</h1> </div> </div> </body> </html>
样式表style.css里的选择器:
#sub-div h1 {color: green;} .sub-content h1 {color: brown;} div#sub-div h1 {color: blue;} #main-div h1 {color: yellow;} div#main-div h1{color: gray;} h1#first-heading {color: black;} div#main-div div.sub-content h1#first-heading {color: purple;} h1#first-heading {color: black !important;}
style.css里面选择器按顺序权重值为
#sub-div h1
一个id为100一个标签为1因此权重值为:100+1=101.sub-content h1
一个类为10一个标签为1因此权重值为:10+1=10div#sub-div h1
一个id为100两个标签为2因此权重值为:100+2=102#main-div h1
一个id为100一个标签为1因此权重值为:100+1=101div#main-div h1
一个id为100两个标签为2因此权重值为:100+2=102h1#first-heading
一个id为100一个标签为1因此权重值为:100+1=101div#main-div div.sub-content h1#first-heading
两个id为200一个类为10两个标签为2因此权重值为:200+10+2=202h1#first-heading { !important}
一个important标记为10000一个id为100一个标签为1因此权重值为:10000+100+1=10101内部样式表<style>的规则:
#main-div h1 { !important;}
一个important标记为10000一个id为100一个标签为1因此权重值为:10000+100+1=10101
注意!!!
id和类的实际位置是完全无关紧要的,只要包含类选择器权重就加10,只要包含id就加100。
也许在我们看来#first-heading是最详细的,但是在浏览器看来它和#main-div或者#sub-div的权重是一样的!!!
再看内联表里面的style:
style="color: maroon;"
内联样式值为1000。
统计之后发现
h1#first-heading {color: red !important;} #main-div h1 {color: black !important;}
选择器的权重最高为10101,两个权重值一样,还不能判断,看最后一步。
第五步:对于冲突的规则,按照选择器在样式表出现的顺序
对于权重一样的选择器,样式表后面的选择器权重高于前面的选择器。
内部样式表和外部样式表权重一样,冲突规则一样看引用的顺序,后引用的权重高。
样式代码里外部样式表后引用,因此外部样式表的权重高于内部样式表的权重。
因此,最终可以确定h1的颜色为:red红色,起作用的选择器为:
h1#first-heading {color: red !important;}
注意:
如果有多个css外部样式表和内部样式表,相当于按引用顺序合并成一个文件后再排序。
所以为了内部样式表起作用,一般把内部样式表放在最后。
其他规则:
如果没有办法找到适合的选择器,则使用继承,继承也没有则使用默认规则。