视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
CSS的独特性Specificity的示例代码分析
2020-11-27 16:40:02 责编:小采
文档


CSS是一个陈述性语言,你可以为DOM中每个元素定义规则风格, 在这些定义中,一些规则会比在顺序上在后面的其他规则具有更高的优先权,比如inline内联就比其之前定义的规则更优先,比如如果我们有下面HTML和CSS代码:

<button class="button-warning">

其CSS是:

.button-warning {
background: red;
}


button, input[type=submit] {
background: gray;
}

因为.button-warning 在 button, input[type=submit]之前定义,按顺序关系猜测,它的background: red会被后者的background: gray覆盖,其实不是,它反而比后者更优先。

一些selector选择器会比其他更具有特殊性,比如#id选择器比.class选择器更高优先权。因为选择器之间有这种相比而言更具特殊性或优先权的现象,因此,如果我们不断任意用一个选择器高于另外一个选择器,那么就会陷入特殊性地狱,因为楼外有楼,山外有山,这样的代码难以维护。所以,在编写选择器时,我们需要问自己,这个选择器是能实现功能的中最低级别的?

下面是特殊性的层次,从高到低:

1.内联最高,内联是用在XHTML中的style内部,直接和XHTML元素挂钩,比如:

<h1 style="color: #fff;">

这个就是在h1元素中内联了style值为”color: #fff;“,这个内联是比其他包括在css文件中的h1定义更具有特殊性,优先权最高,尽管你在css文件中也定义了h1的style,但是因为有了这行的内联定义而失效。

2. 其次是选择器的ID,ID是HTML元素的唯一标识,使用#前缀,比如#p。

3.再次是选择器的类 属性和伪类,包括以圆点为前缀的.classes [属性] 或伪类的:hover :focus。

4.Html元素和伪元素 包括:before 和 :after实例

如果一个元素综合了以上多个特殊性,那么计算特殊性的分数越高,优先权越高,如何计算特殊性?

首先从0分开始,内联增加1000分,ID增加100分,类和伪类加10分,元素和伪元素 加1分。

比如:

body #content .data img:hover

特殊性分数值计算如下:#content是ID,故加100分;.data是类,故加10分;而:hover是伪类故加10分,body是属于Html元素故加1分,而img也是Html元素故加1分,总分是122分。

比如:CSS定义如下:

a{ color:blue;}
p a{ color:green;}
p a.mycolor{ color:red;}

那么Html规则使用如下:

<p><a href="#" class="mycolor"></a></p>

那么,最后哪个定义占据优先权,也就是字体到底是什么颜色?注意这里有一个.mycolor选择器类是分数最高,会加10分,因此这个字的颜色最后为红色。当然,如果没有.mycolor定义,比如:

<p><a href="#" ></a></p>

这时颜色是绿色,因为都是有两个普通html元素p和a,分数为2。

所以,这里有另外一个计算特殊性方法:

  1. 统计选择器中ID的数量,也就是#p之类数量

  2. 统计选择器中的.class类数量

  3. 统计html元素名称和伪元素数量

最后,按照三个顺序从高到低1条-2条-3条定义特殊性。

下载本文
显示全文
专题