CSS入门8-三大特性之层叠特性与优先级

html-css010

CSS入门8-三大特性之层叠特性与优先级,第1张

所谓的层叠性与优先级,其实说白了可以理解为,不同的规则起冲突的情况下,听谁的呢?有的时候这种冲突很容易解决,有的时候我们自己都难以决断,比如好声音三位导师都选你,该跟谁走呢。索性css给出了这些规则的优先级,不需要我们去苦恼。

元素的样式该如何去展现呢,首先看一下某个元素某个属性可能作用样式的情况:

下面我们来详细分析一下这三种情况。

我们先来看有唯一指定样式的情况,因为,这种情况最简单,就一个选择,也别挑了,说啥就是啥。我们还是来大致看看。

结论:若只有唯一指定样式,以该样式为准。

多个样式规则冲突,其实有很多种情况。还记得我们学过样式引入方式有四种,涉及三种样式,分别是内联,内部和外部(参考 CSS入门4-引入CSS )。首先我们来看只引入其中一种类型的情况下,出现冲突该如何解决。

仅有内联的情况下,要出现冲突,只可能是在style中多次对同一个属性赋值。

看上图,审查一下元素,可以看到该元素样式中,前面的red被覆盖了,color最后的取值是blue。最右边文字的颜色确实也是蓝色。

结论:只有内联样式,后面的属性赋值优先级大于前面的属性赋值。

内部样式,已经可以选择多种选择器来指定样式。所以,这里情况比内联会复杂很多。首先来复习一下选择器的种类,可以参考 CSS入门5-选择器 。这么多的选择器类型和组合关系,可能都会产生冲突,这个时候怎么办呢,想想都复杂,我们继续拆分问题。将选择器分为四类:

可以看到div中两个类对颜色的定义冲突时,不管class定义的顺序如何,以style中类的顺序为准,后面的覆盖前面的样式。如果是同一选择器,也是后者覆盖前者,这种情况可以涵盖在同类选择器的情况下。

结论:同类型选择器(类型一样,即同为元素选择器,类选择器,id选择器或者属性选择器),按style中的先后顺序,后者优先级更高。

我们选择正反两种顺序,来看不同选择器之间的比较。首先,四种选择器在一起时,id选择器获胜。然后排除id选择器,剩余三种选择器比较时,类和属性谁在下边谁赢,也就是后者覆盖前者。最后,元素分别与类和属性比较,发现元素都输了。

结论:id >(类和属性) >元素,类和属性同级,遵循同级元素后者覆盖前者的规则。

注:查看某个元素样式的时候,调试窗口是按照优先级规则从小到大往上排的,越往上的规则优先级越高,对同个属性的样式规定将会覆盖下面低优先级的样式规定。

注:要想在调试器看到动态伪类效果,需要在styles中勾选该效果。

看上面示例,我们在style内先按id,类,属性,元素,静态伪类(只应用于超链接),动态伪类(可应用于任何元素),目标伪类:target(IE8-不支持,匹配锚点对应的目标元素),UI元素伪类(IE8-不支持),结构伪类(IE8-不支持)的顺序指定规则。结果发现其表现如下:

a:id >结构伪类 >动态伪类 >静态伪类 >属性 >类 >元素 >浏览器默认属性 >继承属性

input:id >结构伪类 >UI元素伪类 >目标伪类 >动态伪类 >类 >元素 >浏览器默认属性 >继承属性

我们合并一下这两个结论,有如下结论:

3.2.1.2.2.1-1 id >结构伪类 >UI元素伪类 >目标伪类 >动态伪类 >静态伪类 >属性 >类 >元素 >浏览器默认属性 >继承属性

(当然,需要注意的是,并不是每个元素都有这些属性的)

然后,我们将style内各规则倒序一下:

结果发现其表现如下:

a:id >类 >属性 >静态伪类 >动态伪类 >结构伪类 >元素 >浏览器默认属性 >继承属性

input:id >类 >动态伪类 >目标伪类 >UI元素伪类 >结构伪类 >元素 >浏览器默认属性 >继承属性

我们合并一下这两个结论,有如下结论:

3.2.1.2.2.1-2 id >类 >属性 >静态伪类 >动态伪类 >目标伪类 >UI元素伪类 >结构伪类 >元素 >浏览器默认属性 >继承属性

综合3.2.1.2.2.1-1和3.2.1.2.2.1-2来看,我们再次验证了类和属性同级,并且发现它们和伪类也是同级的。有如下结论:

结论:id >(类,属性,伪类) >元素,类,属性和伪类同级,遵循同级元素后者覆盖前者的规则。

伪元素,说是元素,但又不是真实的元素,是一个虚拟的元素。如何详细理解这段话呢,我们来看一下下面这个例子。

先按后代,子代,通用兄弟,相邻兄弟在style中排序,发现后面的优先级高。然后顺序反过来:

由以上几点结论可以得出, 亲戚关系发生冲突时,先看id选择器数量,谁多谁大,一样多就看类(及其同级)选择器,谁多谁大,若还是一样多,则看元素选择器,谁多谁大。如果仍然一样多,谁在后面谁优先。

可以看出, 通配选择器样式优先级仅比浏览器默认样式和继承样式优先级高一些

总结3.2.1.2 仅有内部样式的情况,有如下结论:

ps:对于社群关系,在比较优先级时,将其理解为在该位置拆按顺序成一个个单独的个体即可。

这种情况的表现形式与内部样式一样。

这种情况遵循后者覆盖前者的原则,后面的link优先于前面的link,而不管其加载的顺序如何。

内联 >内部 >外部

CSS的继承性、层叠性、权重

css知多少(3)——样式来源与层叠规则

深入理解CSS中的层叠上下文和层叠顺序

按优先级:前端优先读取正序。正规规范优先倒序。style= 这样肯定是最优的,但也是最不推荐的。前端标签直接写入。延伸阅读:读取优先,灵活使用,如大量页面,每页面都要设置。工作繁琐,大量写入增加代码量。不利优化。<style type="text/css">这样属于第二读取方式。直接写在对应的页面。延伸阅读:每页面都要设置。工作繁琐,大量写入增加代码量。不利优化。<link type="text/css" href=" 引用CSS文件 第三级。这全局引入.延伸阅读:全局CSS。可以分离代码及外部引入,简单快捷。也是现在都在用的。

倒序是reversed,但是只有支持HTML5的浏览器才支持哦~IE9以下就不行了

例如:

<ol reversed>

  <li>Coffee</li>

  <li>Tea</li>

  <li>Milk</li>

</ol>

其他普通排序:

类型值     生成样式     序列举例  

A     大写字母     A、B、C、D、E  

a     小写字母     a、b、c、c、e  

I     大写罗马数字     I、II、III、IV、V  

i     小写罗马数字     i、ii、iii、iv、v  

1     阿拉伯数字     1、2、3、4、5