CSS 如何提高权重?

本文介绍了CSS权重计算的规则,包括内联样式、ID选择器、类选择器、标签选择器的权重贡献。通过实例展示了如何比较不同选择器的权重,并探讨了在实际开发中增加权重的常见方法,如利用更深的层级、ID选择器,以及使用!important。最后,推荐了一种优雅的权重提升方式——叠加类名,以实现样式覆盖的同时保持代码可维护性。
摘要由CSDN通过智能技术生成

如何计算权重?

计算规则:权重由(A、B、C、D)四个值决定,这四个值的含义如下:

  1. 如果出现内联样式 A = 1,否则 A = 0
  2. B 的值等于ID选择器出现的次数
  3. C 的值等于类选择器、属性选择器、伪类出现的次数
  4. D 的值等于标签选择器、伪元素出现的次数

根据上面的规则求出A、B、C、D的值,例如:

     #nav-global > ul > li > a.nav-link:hover

  1. 因为没有内联样式,A=0
  2. ID选择器出现过一次,B=1
  3. 类选择器出现1次,属性选择器出现0次,伪类选择出现1次,C=2

  4. 标签选择器出现3次,D=3

求出的值可以简化为 (0,1,2,3)

如何比较权重?

根据求出来的权重值(A,B,C,D)从左向右依次比较,较大者胜出;如果四位都相等,则遵循后来者居上原则。

例如:

#nav-list .item {
    color: #f00;
}
.nav-list .item {
    color: #0f0
}

#nav-list .item 的优先级为(0,1,1,0)
.nav-list .item 的优先级为(0,0,2,0)

A值都是0,B值前者1大于后者0,所以 #nav-list .item 应该大于 .nav-list .item ,字体颜色会是 #f00。

如何增加权重?

日常开发中,我们经常遇到要覆盖已有样式的问题,但是增加了样式之后却因为权重不够高而无法成功覆盖,通常我们会尝试一下几个方案:

1.根据页面DOM结构,写出一个权重相同的选择器。缺点:不易于维护,DOM结构发生更改,覆盖的样式就需要更改。

示例:

  • <div class="box1">
        <div class="box2">
            <div class="box3">文字</div>
        </div>
    </div>
     
    // 原有样式
    .box1 .box2 .box3 {color: blue}
     
    // 覆盖样式(ps:这么写可以覆盖,但是DOM结构发生更改,CSS结构可能也需要更改)
    .box1 .box2 .box3 {color: red}

2. 使用更深的层级。缺点:为了增加权重而去增加DOM结构,很显然不是最优解,更何况很多组件你没法更改样式。

3.使用ID选择器覆盖。缺点:这样会使样式权重过高,之后想要覆盖只能使用!important了。

4.使用!important。缺点:这是最差的方法,会让样式权重高到下一次你不知道怎么解决。

那么如何更好的增加权重呢?

.box3.box3.box3 { color: red}

叠加你所要更改的元素类名,既增加了权重,也不需要考虑它结构发生更改,也不需要考虑下一次如何覆盖,轻轻松松覆盖样式了哟~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值