ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【css要点总结】004 特征性

2021-07-28 20:58:25  阅读:195  来源: 互联网

标签:权重 color class red 004 特征性 选择器 css


特征性

特征性是级联算法的一个关键部分,本节内容将深入了解特征性。

上一节,介绍了级联算法,级联算法是为了解决css规则冲突的算法。而特征性作为其中一个重要部分,我们有必要去弄懂它。

假设有如下css和html:

<button>color?</button>

button {
  color: red;
}

.branding {
  color: blue;
}

按钮文字将显示蓝色。因为类选择器的权重高于类型选择器。

一.特征性分数(权重)

比较两个选择器的特征性(权重)大小,实际上是计算两个选择器的分数(权重,后面我统称权重),权重大的将会在规则冲突中胜出。

不同选择器的权重

通配选择器

通配选择器(*),没有特征性,它的权重为0。这意味着任何其他权重大于0的选择器都会覆盖通配选择器的规则。

* {
    color: red;
}

类型选择器和伪元素选择器

类型选择器,也可以叫做标签选择器,还可以被叫做元素选择器,具体叫法随意,只要你明白就行了。类型选择器和伪元素选择器的权重都为1

// 类型选择器
div {
    color: red;
}

// 伪元素选择器
::selection {
    color: red;
}

类选择器、伪类选择器和属性选择器

类选择器、伪类选择器和属性选择器的权重为10

// 类选择器
.my-class {
    color: red;
}

// 伪类选择器
:hover {
    color: red;
}

// 属性选择器
[href='#'] {
    color: red;
}

ID选择器

ID选择器的权重为100

#myID {
    color: red;
}

内联样式

内联样式的权重为1000

<div style="color: red">内联样式的权重为1000</div>

!important

!important的规则的权重为10000,如果你写下了一个!important的规则,前面提到的所有种类的规则都将会被覆盖。

.my-class {
    color: red !important; /* 10,000 points */
    background: white; /* 10 points */
}

二. 权重的累加

前面讲过,一个选择器的权重分数是累加计算的。下面以一个例子说明。
假设有如下html:

<a class="my-class another-class" href="#">A link</a>

下面的css,权重为1:

a {
    color: red;
}

然后,增加一个类使选择器更具体,此时权重为11:

a.my-class {
    color: green;
}

再添加另一个类名,权重变为21:

a.my-class.another-class {
    color: rebeccapurple;
}

在上面的基础上,添加一个属性,权重更新为31:

a.my-class.another-class[href] {
    color: goldenrod;
}

最后,添加一个伪类,权重为41:

a.my-class.another-class[href]:hover {
    color: lightgrey;
}

三.可视化特征性

至此你应该知道了如何去计算一个选择性的权重(分数)。如何去写一个规则覆盖另一个规则。下面的示意图很好的总结了各类型选择器的权重(分数)。

css选择器权重

最左侧是id选择器,中间是类选择器、属性选择器和伪类选择器,最后面是元素选择器和伪元素选择器。

如果用图中的格式描述权重,下面的权重为0-4-1:

a.my-class.another-class[href]:hover {
    color: lightgrey;
}

附:参考资料

谷歌learn css: specifity

(完)。

标签:权重,color,class,red,004,特征性,选择器,css
来源: https://blog.csdn.net/AHcola233/article/details/119189713

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有