CSS 特异性看这篇就行了

CSS 特异性

背景:在我每次画界面的时候,总会出现样式冲突、样式污染、一级很多样式改不掉的问题。所以总结一文来彻底搞懂css样式的特异性,方便你我他。

什么是css特异性?

如果有多个属性或者选择器同时指向同一元素的CSS冲突 ,那么优先使用什么样式规则。那么便有了特异性的概念。

特异性(specificity)视为得分/等级,能够确定最终将哪些样式声明应用于元素。

简单来说:CSS特异性就是CSS样式选择器的权重计算。从而让哪些样式应用到元素上。

特异性层次

每一种选择器都有自己的权重,依次是
行内样式 > ID选择器 > 类、属性、伪类 > 元素、伪元素选择器
我们来个例子说明一下:
代码:

<body>
    <div id="id1" class="class1" style="background: blue;">说明行内样式最强</div>
    <div id="id2" class="class2">id排第二</div>
    <div class="class3">类、属性、伪类</div>
    <div>元素选择器最后</div>
</body>

<style>
    /* 元素选择器 */
    div{
        width: 100px;
        height: 100px;
        background-color: rgba(93, 171, 195, 0.931);
        display: inline-block;
    }
    /* id选择器 */
    #id1,#id2{
        background-color: red;
    }
    /* 类选择器 */
    .class1,.class2,.class3{
        background: orange;
    }
</style>

效果:

在这里插入图片描述

可以说明上面的选择器权重是不同的。

权重计算特异质

这么多选择器,那是不是我写一个行内样式其他样式就全部没用了呢?NONONO,这个时候我们就要来计算权重了。

我们以一个 0 0 0 0 四位数为样式的权重总和

从最低的元素、伪元素选择器 在个位+1 就是 0 0 0 1

类、属性、伪类 在十位数+1 就是 0 0 1 0

ID选择器 在百位数+1 就是 0 1 0 0

行内样式 在千位数+1 就是 1 0 0 0

比较每一个权重值的总和,大的样式优先。

例子:

<body>
    <div id="main">
        <div class="content">
            <p class="name">浪漫主义码农</p>
            <p class="hobby">爱好打篮球</p>
            <p class="eat">是个吃货</p></p>
        </div>
    </div>
</body>
<style>
    /* 权重 0 0 0 1 */
    p{
        color: red;
    }
    /* 权重 0 0 1 0 */
    .name{
        color: blue;
    }
    /* 权重 0 0 2 1 */
    .content p:nth-child(1){
        color: chartreuse;
    }
</style>

效果:

在这里插入图片描述

计算就是这样计算的。但是如果有相同权重的,就按照定义的顺序优先的样式

补充

除了上述的选择器外,通用选择器* 权重为0 0 0 0 为最低

!important 表示 非必要不使用,是比行内样式更为重要,是权重最高的,无视其他。

例子:当我给最低的权重加一个!important

<body>
    <div id="main">
        <div class="content">
            <p class="name" style="color: chartreuse;">浪漫主义码农</p>
            <p class="hobby" style="color: chartreuse;">爱好打篮球</p>
            <p class="eat" style="color: chartreuse;">是个吃货</p></p>
        </div>
    </div>
</body>
<style>
    /* 权重 0 0 0 2 */
    p:nth-child(1){
        color: red !important;
    }
    /* 权重 0 0 1 0 */
    .name{
        color: blue;
    }
</style>

效果:

在这里插入图片描述

写在最后

如果有误,欢迎大佬们评论指出。

💌 慢品人间烟火色,闲观万事岁月长 💌

一个心怀浪漫宇宙,也珍惜人间日常的码农

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值