CSS权重计算
在没有引入权重的概念时,我们对css的优先级认识是这样的 !important>
行内样式>
ID>
类/伪类|属性>
标签 排在最前面的优先级越高。 但css是有权重机制的,css的优先级都是根据权重推算出来 如下表格 用四位数字来表示,分别表示四个级别,从左到右不断递减(排在前面的越大)
Name | 0,0,0,0,(贡献值) |
---|---|
标签 | 0,0,0,1 |
类/伪类 | 0,0,1,0 |
ID | 0,1,0,0 |
行内式 | 1,0,0,0 |
!import | 无穷大 |
根据上图,我们可以轻易的看出他们的优先级,根据其贡献值(1)的排列位置得出
1的位置越前面,优先级越高
!important>
行内样式>
ID>
类/伪类|属性>
标签
我们来写一下代码,看是否是这样的
<!DOCTYPE html>
<html>
<head>
<title></title>
<style type="text/css">
div {
/* 0,0,0,1*/
color:red;
}
.color {
/*0,0,1,0*/
color:green
}
#ches {
/*0,1,0,0*/
color:blue;
}
</style>
</head>
<body>
<div id="ches" class="color" style="color:gray">
测试测试测试测试
</div>
</body>
</html>
浏览器显示结果,符合我们的上述规则
根据上面表格我们自动!important
的级别最大,测试代码
div {
/* 0,0,0,1*/
color:red!important;
}
我们知道标签选择器的权重值最低,但加了!important
之后变成了无穷大
权重叠加
css中权重是可以叠加的,如常见的导航栏布局
li{
/*0,0,0,1*/
color:red;
}
我们知道标签选择器的权重最低,但这里没有比他更大的选择器了,所以正常显示红色,但经过权重叠加后
li{
/*0,0,0,1*/
color:red;
}
ul li {
/*权重叠加之后 0,0,0,2*/
color:green;
}
由图可见列表变成了绿色,这是因为权重叠加的问题 ul 的权重为 0,0,0,1 li 的权重为 0,0,0,1 两个叠加后:0,0,0,2 所以 ul li
选择器优先于li
选择器
注意:继承的权重为0
写一个例子,证明继承的权重为0;
.color {
color:red;
}
<nav class='color'>
<ul>
<li>继承过来的权重为0</li>
</ul>
</nav>
以上代码 li
的颜色是什么?答案肯定是红色,li没有设置颜色,先去父元素ul上找,发现也没有设置颜色,最后在父父元素nav
应用了颜色,这里是继承过来的颜色,上面我们说了,继承的权重为0 如何验证这句话,很简单,给li
标签添加一个颜色;
.color {
color:red;
}
li {
color:blue;
}
<nav class='color'>
<ul>
<li>继承过来的权重为0</li>
</ul>
</nav>
猜想一下li
会是什么颜色?通过“权重表”我们知道 类的权重值为 0,0,1 ,0 标签的权重值为 0,0,0,1 既然标签的权重值最低,那么优先级肯定是类优先于标签 打开浏览器查看结果
额。。。好像跟我们猜想的不一样,按照优先级顺序不是应该显示红色吗? 这就验证了“继承的权重为0”这句话,当li
继承nav发生了颜色改变,此时的nav
权重为 0,0,1,0,但li
的权重会变为0; 但我们中又给li
单独设置了样式,此时 li
的权重为 0,0,0,1 0,0,0,1>0,0,0,0所以结果显示蓝色
接下来练习几到题,巩固一下权重
#father #son{
color:blue;
}
#father p.c2{
color:black;
}
div.c1 p.c2{
color:red;
}
#father{
color:green !important;
}
//html
<div id="father" class="c1">
<p id="son" classs="c2"> 猜想一下这行字体是什么颜色 </p>
</div>
先上结果---蓝色 分析:
1.首先排除红色的选择器,因为类的权重最低,这里又出现了ID
2.或许你会选择绿色,因为有一个!important
他的权重最高,但你忘了,继承的权重为0,这里是继承p是继承div的颜色,上面代码肯定有比0高的
3.接下来就只有黑色和蓝色了 蓝色的权重为 0,0,0,2 黑色的权重为0,0,0,1+0,0,0,1,0=0,0,1,1 所以最后结果为蓝色 第二道题
#father {
color:red;
}
p{
color:blue;
}
//html
<div id="father" >
<p> 猜想一下这行字体是什么颜色 </p>
</div>
答案----蓝色 因为继承权重为0 第三道题:
div p {
color:red;
}
/*权重最低*/
#father{
color:black;
}
/*权重0*/
p.c2{
color:blue;
}
//html
<div id="father" >
<p class="c2"> 猜想一下这行字体是什么颜色 </p>
</div>
答案---蓝色
1.标签元素权重为0,0,0,1
2.继承权重为 0
3.p.c2的权重为 0,0,0,1+0,0,1,0
第四到题
.c1 .c2 div {
color:blue;
}
/*权重最低*/
div #box3 {
color:green;
}
#box1 div {
color:yellow;
}
//html
<div id="box1" class="c1">
<div id="box2" class="c2">
<div id="box3" class="c3">
文字颜色
</div>
</div>
</div>
答案--黄色
1.蓝色权重最低
2.绿色和黄色权重一样,按照就近原则
相关文章
- Z—score模型公式计算_Prim算法
- CSS媒体查询_css网页
- 大数据计算引擎 EasyMR:拥抱开源,引领技术创新
- re:Invent 2022 全回顾:看见云计算的力量,透视未来的云计算
- 【CSS】CSS 特性 ⑤ ( CSS 优先级 | 经典权重计算示例 1 )
- Java 计算 double参数的百分比,返回结果是带%
- css3优先级计算详解编程语言
- 属性Oracle的CSS属性:让你的网站更出彩(oracle的css)
- 掌握Oracle多行函数,开启多重计算新篇章(oracle多行函数)
- Linux运维与云计算:实现数字经济转型(linux运维和云计算)
- 硬核观察 #331 阿里巴巴使用量子计算来保护支付宝的金融交易
- 云计算“高空”中行走 前路漫漫
- Linux CVM 独特的虚拟化技术让云计算更高效和安全(linuxcvm)
- MySQL计算两属性差值(MySQL两属性相减)
- CSS规则层叠的应用css必须要注意的几点
- ASP计算str2在str1中出现的次数