正确的CSS选择器优先级的计算方式

1.css选择器的优先级简单的权重相加吗?

显然不是

我们可以看到或听到很多人对于css选择器优先级的计算都是使用了所谓的权重相加,行间样式权重为1000?,id选择器权重为100?,class/属性/伪类选择器权重为10?,标签/伪元素选择器权重为1?,通配符为0?,然后把所有的权重相加,权重更大的优先级更高,权重相等的,后面的覆盖前面的样式,尽管从表面看没有什么问题,但这种计算优先级的方式显然是错误的。

2.怎样正确计算css选择器的优先级?

w3c官网链接:第16条,计算选择器的特异性https://www.w3.org/TR/selectors/#specificity

对于给定元素,选择器的特异性计算如下:

计算选择器中ID选择器的数量(= A)
计算选择器中的类选择器,属性选择器和伪类的数量(= B)
计算类型选择器和选择器中的伪元素的数量(= C)
忽略通用选择器

最终的特异性用 (A,B,C) 表示
如果选择器是选择器列表,则为列表中的每个选择器计算此数字。
对于针对列表的给定匹配过程,有效的特异性是列表中最匹配的选择器的特异性。

通过按顺序比较这三个组成部分来比较特异性:A值越大的特异性越具体;如果两个A值绑定在一起==(两个A值相同),则B值越大的特异性越具体。如果两个B值也绑定在一起(两个B值相同),则C值越大的特异性越具体。如果所有值都绑定在一起(A,B,C值都相同)==,则两个特异性相等。
谁的特异性大,就会应用谁的样式,如果特异性相同,则后面的样式会覆盖前面的。
由于存储限制,实现可能会限制A,B或C的大小。如果是这样,则必须将高于限制的值限制在该限制内,并且不要溢出。

例如:
		#a .b{}        //A=1,  B=1, C=0
		.a.b.c.d.e.f.g.h.i.j.k.l.m.n {}     //A=0,  B=14, C=0
		//显然第一个的特异性更大,自然会应用第一个的样式
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值