css样式表中的样式覆盖顺序,两个class同时存在会怎样?有时候在写CSS的过程中,某些限制总是不起作⽤,这就涉及了CSS样式覆盖的问题,如下
Css代码
1. #navigator {
2.    height: 100%;
3.    width: 200;
4.    position: absolute;
5.    left: 0;
6.    border: solid 2 #EEE;
7. }
8.
9. .current_block {
10.    border: solid 2 #AE0;
11. }
查⼀些教材中(w3schools等),只说css的顺序是“元素上的style” > “⽂件头上的style元素” >“外部样式⽂件”,但对于样式⽂件中的多个相同样式的优先级怎样排列,没有详细说明。经过测试和继续搜索,得知优先级如下排列:
1. 样式表的元素选择器选择越精确,则其中的样式优先级越⾼:
id选择器指定的样式 > 类选择器指定的样式 > 元素类型选择器指定的样式
所以上例中,#navigator的样式优先级⼤于.current_block的优先级,及时.current_block是最新添加的,也不起作⽤。
2. 对于相同类型选择器制定的样式,在样式表⽂件中,越靠后的优先级越⾼
注意,这⾥是样式表⽂件中越靠后的优先级越⾼,⽽不是在元素class出现的顺序。⽐如.class2 在样式表中出现在.class1之后:
Css代码
1. .class1 {
2.    color: black;
3. }
4.
5. .class2 {
6.    color: red;
7. }
⽽某个元素指定class时采⽤ class="class2 class1"这种⽅式指定,此时虽然class1在元素中指定时排在class2的后⾯,但因为在样式表⽂件中class1处于class2前⾯,此时仍然是class2的优先级更⾼,color的属性为red,⽽⾮black。
cssclass属性3. 如果要让某个样式的优先级变⾼,可以使⽤!important来指定:
Css代码
1. .class1 {
2.    color: black !important;
3. }
4.
5. .class2 {
6.    color: red;
7. }
此时class将使⽤black,⽽⾮red。
对于⼀开始遇到的问题,有两种解决⽅案:
1. 将border从#navigator中拿出来,放到⼀个class .block中,⽽.block放到.current_block之前:Css代码
1. #navigator {
2.    height: 100%;
3.    width: 200;
4.    position: absolute;
5.    left: 0;
6. }
7.
8. .block {
9.    border: solid 2 #EEE;
10. }
11.
12. .current_block {
13.    border: solid 2 #AE0;
14. }
需要莫仁为#navigator元素指定class="block"
2. 使⽤!important:
Css代码
1. #navigator {
2.    height: 100%;
3.    width: 200;
4.    position: absolute;
5.    left: 0;
6.    border: solid 2 #EEE;
7. }
8.
9. .current_block {
10.    border: solid 2 #AE0 !important;
11. }

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。