CSS的全称叫做层叠样式表
,但估计很多人都不知道“层叠”二字的含义。其实,“层叠”指的就是样式的覆盖,当一个元素被运用上多种样式,并且出现重名的样式属性时,浏览器必须从中选择一个属性值,这个过程就叫“层叠”。
- 规则一:由于继承而发生样式冲突时,最近祖先获胜。
- 规则二:继承的样式和直接指定的样式冲突时,直接指定的样式获胜。
- 规则三:直接指定的样式发生冲突时,样式权值高者获胜。
- 规则四:样式权值相同时,后者获胜。
- 规则五:!important的样式属性不被覆盖。(太脏)
样式的权值取决于样式的选择器,权值定义如下表。
CSS选择器 | 权值 |
标签选择器 | 1 |
类选择器 | 10 |
ID选择器 | 100 |
内联样式 | 1000 |
伪元素(:first-child等) | 1 |
伪类(:link等) | 10 |
内联样式的权值>>ID选择器>>类选择器>>标签选择器
,除此以外,后代选择器的权值为每项权值之和,比如”#id .class a”的权值为100 + 10 + 1 = 111。!important
可以看做是万不得已的时候,打破上述前四个规则的”金手指”。如果你一定要采用某个样式属性,而不让它被覆盖的,可以在属性值后加上!important
- css的顺序是
元素上的style
>文件头上的style元素
>外部样式文件
- 样式表的元素选择器选择越精确,则其中的样式优先级越高:
id选择器指定的样式
>类选择器指定的样式
>元素类型选择器指定的样式
- 对于相同类型选择器指定的样式,在样式表文件中,
越靠后的优先级越高
注意,这里是样式表文件中越靠后的优先级越高,而不是在元素class出现的顺序。比如.class2 在样式表中出现在.class1之后: 而某个元素指定class时采用 class="class2 class1"这种方式指定,此时虽然class1在元素中指定时排在class2的后面,但因为在样式表文件中class1处于class2前面,此时仍然是class2的优先级更高