CSS优先级-权重叠加计算

  • 先上总结:

  1. 说明:

  1. 公式: (行内, Id, 类, 标签)

  1. 规则: 从左至右依次做个数上的比较, 如果同级数量一致, 则比较下一级个数, 直到某一级数量不一致, 则数量较大的一方选择器的优先级较高, 后面的数量就无需比较了。 如选择器1 (0, 0, 1, 0), 选择器2 (0, 0, 0, 3), 那么选择器1的优先级高于选择器2。如果所有的数值都一致的话, 说明两选择器相同, 那就依据css层叠性的特点. 浏览器会选择后一个选择器

  1. 备注:

  1. 权重叠加计算不是正常的加法计算, 不需要逢十进一。 如标签是11 类是0 那么只可以是 (0, 0, 0 , 11), 不能是(0, 0, 1, 1)

  1. * 通配符没有权重

  1. 无论父标签用了什么选择器并设置了什么样式, 对子标签来说都是继承, 继承的优先级永远是最低的。

  • 准备:

先添加一段html代码

<div>
    <p>这是一个段落</p>
</div>

之后为了能更好地查看结果, 设置点字体样式, 由于咱代码简单, 就使用一个通配符选择器设置样式

* {
    font-family: 楷体;
    font-size: 60px;
 }

  • 代码示例说明:

  1. 同级数量的比较

  1. 先写一个p标签选择器, 运行一下效果

/* (0, 0, 0, 1) */
 p {
    color: blue;
 }
  1. 再写一个后代选择器如下, 再运行一下效果

/* (0, 0, 0, 2) */
 div p {
    color: aqua;
 }

由于后者标签数量高于前者标签数量, 所以后者选择器高

建议: 可以把b步骤的代码放在a步骤的前面 ,这样可以更好地体现优先级的关系(优先级是没有层叠性的特点), 可以更好地排除层叠性的可能(虽然根本就没这可能, 只是方便理解), 以下示例皆是如此

  1. 不同级别的比较

  1. 设计一个类构造器

/* (0, 0, 1, 0) */
.son {
    color: darkslategray;
}
  1. 在p标签上加上类选择器

<div>
    <p class="son">这是一个段落</p>
</div>

由于类级别比标签高, 所以.son 选择器的优先级别高于div p选择器

  1. 通配符没有权重的问题

首先优先级是没有层叠性的特点的, 这个在建议中也有描述。

其次咱可以假设它具备权重, 那样的话它就不会有层叠行的效果

  1. 先写一个p标签选择器, 样式和之前的一样

p {
    color: blue;
 }
  1. 之后在它的后面写一个* p选择器

* p {
    color: yellowgreen;
 }

查看效果是文字的颜色是yellowgreen。

  1. 接下来把* p选择器的代码放在p选择器之上, 再运行

这时候会发现字体颜色由原来的yellowgreen变为了blue。这就说明它并没有体现优先级, 而是体现出了层叠性的效果, 所以说通配符在权重叠加计算中没有任何权重

  • 示例代码:

以下是我的实例代码, 请参考

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /*
            权重计算: 
                1. 说明: (行内, Id, 类, 标签)
                2. 规则: 从左至右依次做个数上的比较, 如果同级数量一致, 则比较下一级个数, 直到某一级数量不一致, 则数量较大的一方选择器的优先级较高, 
                        后面的数量就无需比较了。 如选择器1 (0, 0, 1, 0), 选择器2 (0, 0, 0, 3), 那么选择器1的优先级高于选择器2。如果所有的数值都一致的话, 
                        说明两选择器相同, 那就依据css层叠性的特点. 浏览器会选择后一个选择器
            备注:
                1. * 通配符选择器没有权重
                2. 无论父标签用了什么选择器并设置了什么样式, 对子标签来说都是继承, 继承的优先级永远是最低的.
                3. 权重叠加计算不是正常的加法计算, 不需要逢十进一
         */ 
         /* 权重计算 */
         /* (0, 2, 0, 0) */
        #divBox #pBox {
            color: orchid;
        }

        /* (0, 1, 0, 0) */
        #pBox {
            color: orange;
        }

         /* (0, 0, 2, 0) */
         .dad .son {
            color: rebeccapurple;
         }
        
         /* (0, 0, 1, 1) */
        .dad p{
            color: chartreuse;
        }

        /* (0, 0, 1, 0) */
        .son {
            color: darkslategray;
        }

         /* (0, 0, 0, 2) */
         div p {
            color: aqua;
         }
         
         /* 通配符没有权重 */
         /* 假使 * 有权重, 那么即使是如下的顺序也不会前一个选择器也不会被后一个选择器覆盖 */
         /* (0, 0, 0, 1) */
         * p {
            color: yellowgreen;
         }
         /* (0, 0, 0, 1) */
         p {
            color: blue;
         }

         * {
            font-family: 华文行楷;
            font-size: 60px;
         }
    </style>
</head>
<body>
    <div class="dad" id="divBox">
        <!-- (1, 0, 0, 0) -->
        <p class="son" id="pBox" style="color: gold;">这是一个段落</p>
    </div>
</body>
</html>
  • 备注:

头回写博客,如有写的不好或是有问题, 还请多多指教多多担待, 如有问题或是建议, 欢迎评论区里留言

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
CSS选择器的权重计算是通过CSS Specificity(特殊性)来确定的。在计算权重时,可以按照以下规则进行计算: 1. 选择器的特殊性由选择器本身的组成部分决定,包括元素选择器、类选择器、id选择器和内联样式。通常来说,id选择器的特殊性最高,其次是类选择器和属性选择器,再次是元素选择器。 2. 对于相同特殊性的选择器,后面出现的选择器会覆盖前面出现的选择器。 3. 使用!important声明的样式具有最高的特殊性,将覆盖其他所有的样式。 根据上述规则,可以用以下公式来计算选择器的权重: - id选择器:权重为1,例如#myId{} - 类选择器、属性选择器或伪类选择器:权重为10,例如.class{}、[type="text"]{}、:hover{} - 元素选择器或伪元素选择器:权重为100,例如div{}、::before{} - 内联样式:权重为1000,例如<div style="color:red;"> 在计算完各个选择器的权重后,具体的权重比较规则是:按照权重从左到右依次比较,权重值较大的样式会覆盖权重值较小的样式。 需要注意的是,CSS权重计算只适用于冲突的样式规则。如果没有发生冲突,那么所有样式规则都会生效。 总结起来,CSS选择器的权重计算是通过特殊性来确定的,特殊性由选择器本身的组成部分决定,而权重比较是按照权重从左到右依次比较的原则。这样,在编写CSS样式时,我们可以更好地控制样式的优先级。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [CSS选择器与权重计算(详细)](https://blog.csdn.net/weixin_44164982/article/details/107227294)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [CSS选择器的权重计算](https://blog.csdn.net/u010297791/article/details/58602255)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鹏云友

您的鼓励是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值