你所不知道的Css层叠规则

作者: snayan | 来源:发表于2016-10-20 21:15 被阅读70次

我们都知道,css中可以使用多种不同的方法选择元素。可能同一个元素可以使用两个或多个规则来选择,每个规则都有其自己的选择器。当对同一个元素应用多个选择器规则时,用户代理(浏览器)使用层叠的方式来最终展示。

特殊性

对于每个规则,用户代理(浏览器)会计算选择器的特殊性,并将这个特殊性附加到规则中的各个声明。如果同一个元素有两个或者多个冲突的属性声明时,那么有最高特殊性的声明就会胜出。
特殊性值使用4个部分表示,0,0,0,0。一个选择器的具体特殊性如下计算:

  • 元素內联样式规则声明,加1,0,0,0。
  • 对于选择器中给定的各个ID属性值,加0,1,0,0。
  • 对于选择器中给定的各个类属性值(class),属性选择(attribute)或者伪类,加0,0,1,0。
  • 对于选择器中给定的各个元素(element)或者伪元素,加0,0,0,1。
  • 通配符(*)的特殊性为0,0,0,0
  • 继承样式的特殊性无,并不是0,0,0,0。

从上可以得出:內联 > ID选择 > class选择|attribute选择|伪类选择 > element选择 > 通配符选择 > 继承
例如下面的例子:

h1 { color: red; } //特殊性为:0,0,0,1
p em { color: purple; }//特殊性为:0,0,0,2 因为p,em都是元素选择器,累加
.grape { color: purple; }//特殊性为:0,0,1,0
*.bright { color: yellow; }//特殊性为:0,0,1,0 因为通配符特殊性为0,0,0,0
#id216 { color: blue; }//特殊性为:0,1,0,0
p.bright   em.dark { color: maroon; }//特殊性为:0,0,2,2。2个元素,2个类
div#sidebar  *[href]  { color: silver; }//特殊性为:0,1,1,1

假如一个em元素即与上例中第2条规则匹配,又与第6条匹配,则这个em将会显示maroon颜色,因为第6条的特殊性大于第2条的特殊性。
注意:元素继承的属性的特殊性是没有的,甚至连0特殊性都没有。例如下面的例子:
* { color : gray; }
h1#page-title { color: black; }

 <h1 id="page-title"> Hello <em> http://www.snayan.com </em> </h1>

上面em内容将显示gray颜色,因为通配符(*)的特殊性为0,0,0,0;而继承h1的特殊性无。特殊性为0的规则声明 > 没有特殊性的规则声明。

重要性

有时某个声明的规则样式可能非常重要,超过了所有其他声明,则允许在这个重要的声明的结束分号之前插入!import来标识。必须正确的放置 !import,否则声明将无效。
标志为!import的声明并没有特殊的特殊性值,不过它要与非重要声明分开考虑。实际上,所有的!import声明会分组在一起,重要声明的特殊性冲突会在重要声明内部解决,而不会与非重要声明相混。类似的,我们把所有非重要声明放在一组,内部冲突内部解决。如果,一个重要声明和一个非重要声明冲突,则总是重要声明胜出。

层叠

上面讨论了用户代理(浏览器)通过特殊性值来选择为元素应用样式。但是,如果一个元素的同时匹配了特殊性值相等的2个规则,例如下面的规则声明,那将如何解决这个冲突呢?解决办法就是下面说的层叠规则了。

 h1 { color :red; }
 h1 { color: yellow; }

css层叠规则:

  1. 找出所有相关的规则,这些规则都包含与一个给定元素匹配的选择器。
  2. 按照显示权重对该元素的所有声明排序。标志!import的规则声明显示权重要高于非重要规则声明。
  3. 按照特殊性值对该元素的所有声明排序。特殊性值大的高于特殊性值小的规则声明。
  4. 按照规则声明出现的先后顺序对该元素的所有声明排序。后出现的规则声明高于先出现的规则神明。

相关文章

  • 你所不知道的Css层叠规则

    我们都知道,css中可以使用多种不同的方法选择元素。可能同一个元素可以使用两个或多个规则来选择,每个规则都有其自己...

  • CSS

    CSS规则 at 规则 CSS选择器 CSS选择器 继承与层叠 继承与层叠 CSS 属性 CSS 属性 CSS值 ...

  • The Definitive Guide css

    css 和 文档 层叠: css中解决样式冲突的规则,称为层叠 元素: 替换、非替换元素 替换元素: ...

  • CSS学习笔记(2018-07-29)

    CSS学习笔记 CSS 指层叠样式表 (Cascading Style Sheets) CSS语法 CSS 规则由...

  • css的层叠

    css2的css的层叠 《css世界》的读书笔记,非原创。背景是css2。 z-index只是层叠规则中的一个属性...

  • w3cshcool CSS笔记

    目录 ### CSS简介 ### CSS简介 - 样式层叠次序 - 一般而言,所有的样式会根据下面的规则层叠于...

  • CSS

    CSS层叠样式表 一、css的语法 什么是css?层叠样式表 命名规则:使用字母、数字或下划线和减号构成,不要以数...

  • CSS权重

    原文 博客原文 大纲 1、CSS层叠2、CSS权重3、权重等级4、权重的规则5、!important 1、CSS层...

  • CSS样式之层叠、特殊性以及继承

    层叠 CSS中通过层叠的机制来处理多个规则同时作用于一个元素的情况。这是一个非常重要的概念,通过CSS(层叠样式表...

  • CSS

    CSS 指层叠样式表 (CascadingStyleSheets) 一般而言,所有的样式会根据下面的规则层叠于一个...

网友评论

    本文标题:你所不知道的Css层叠规则

    本文链接:https://www.haomeiwen.com/subject/cjfquttx.html