博客为何而来:今天遇到一个问题:标签.类名的权重是多少?这个我也不是很清楚,本来想走捷径:问问别人,百度一下啊……问了一个同学,他开口直接说是20;我问为毛是20,他说标签名10,类名是10,共计20。在我指出标签名权重是1后,他也觉得自己说错了。我百度了一下,也没有得到什么结果。觉得自己的验证过程可以写篇小博客,然后此刻也不是很慢,那我就不拖拉,就是干咯。
类名.标签,可以解释为:标签中有此类名的元素。
大家都知道:
- id选择器的权重加0,1,0,0;
- 类选择器、属性选择器或伪类的权重加0,0,1,0;
- 元素和伪元素的权重加0,0,0,1;
- 元素和伪元素的权重加0,0,0,1;
- 通配选择器*对权重没有贡献,即0,0,0,0;
- 最后比较特殊的一个标志!important,它的优先级是最高的,为了方便记忆,可以认为它的权重为1,0,0,0,0;
权重越高,样式被应用的优先级也就越高,约难被其他样式覆盖;
话不多说,计算权重代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>标签.类名的权重是多少?</title>
<style>
/* 权重:10+10=20 位置:1*/
.container .child{
color: red;
}
/* 权重:10 位置:2*/
.child{
color: blue;
}
/* 权重:10+1=11 位置:3*/
.container p{
color: green;
}
/* 权重是多少呢? 位置:4*/
p.child{
color: yellow;
}
</style>
</head>
<body>
<div class="container">
<p class="child">标签.类名的权重是多少?</p>
</div>
</body>
</html>
我计算的方法:通过比较已知的类名权重和层叠样式表中权重相同的样式,后面的样式会覆盖前面的样式的样式,来计算出标签.类名的权重。放到代码中具体实现是:通过定义样式,来改变p标签的文本颜色,查看浏览器渲染结果,来得出权重值;
为了高效计算这个值,我们直接在浏览器中调试样式了。
首先,直接执行上面代码,结果截图如下:
分析:我们知道,类名的权重是10,两个类名叠加权重值为20;而且这个样式位置在最顶部,添加在同一个标签上的其他样式都没有生效,所以其他的样式权重都小于20;
其次,直接在浏览器中取消已经生效的样式,看看浏览器会渲染哪个样式,渲染哪个,第二个权重高的样式可能就是哪个啦,结果截图如下:
分析:难道这个权重是第二高的吗?我们知道,同权重的样式,层叠样式表中越靠后的会覆盖前面的,上面代码中标签.类名这个样式是写在最后,我们可以先换换样式的位置,再下定论;
接下来,换位置,再执行:
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>标签.类名的权重是多少?</title>
<style>
/* 权重:10+10=20 位置:1*/
/*.container .child{
color: red;
}*/
/* 权重是多少呢? 位置:4*/
p.child{
color: yellow;
}
/* 权重:10 位置:2*/
.child{
color: blue;
}
/* 权重:10+1=11 位置:3*/
.container p{
color: green;
}
</style>
</head>
<body>
<div class="container">
<p class="child">标签.类名的权重是多少?</p>
</div>
</body>
</html>
注意:这里的标签.类名的样式已经被提到第二的位置了,并且通过前面的操作,我们已经知道标签.类名的权重小于20,所以我们这里直接把双类名的权重给注释掉;
重新执行代码,运行结果截图如下:
分析:更换位置之后的结果和上面的结果不符,所以这里是因为靠下的样式会覆盖同权重的样式的缘故。这里也可以得出,(类名 标签)的权重和(标签.类名)的权重一样,也就是11;
小结:标签.类名的权重是11。
好啦,博客随着有了结果,也就写完了,趁着下午天气不是很热,砖不烫手,赶紧去搬砖了。