css选择器优先级

最初接触css选择器优先级这一块的内容的时候,是以下面这张图为准:
css选择器优先级 ,按照上图进行计算,但是我昨天看了一篇文章发现这样算是错误的。

文章地址:https://hacks.mozilla.org/2017/08/inside-a-super-fast-css-engine-quantum-css-aka-stylo/

他里面讲的css选择器是按照如下的这种方式计算优先级的:
css选择器优先级

看到上面图我就突然想到css选择器优先级会不会是按照位数来计算的,随后我尝试用11个class去覆盖1个id的样式,但是覆盖失败,所以最初的那种计算方式是错误的,随后我接着查找看到了下面这篇文章:有趣:256个class选择器可以干掉1个id选择器

根据里面的例子在IE下面256个class选择器可以干掉1个id选择器,计算机信息都是以二进制存储的,8位就是00000000-11111111,有2^8种变化,也就是256种变化,那这么说浏览器存储class的形式就是按照位数来进行计算的,但是256个class选择器在非IE下是干不掉1个id选择器,可能是以更大的16位来算吧(或者是做了不溢出的判断),例如上面文章中说到的Opera浏览器。

之所以最初的那种计算方式没有出过错,是因为我们很少去定义这么多的选择器,但是我们还是需要知道一些极限问题,这样更有利于我们进行编码。

所以关于css的优先级计算问题请记住 style > id > class / 属性选择器 / 伪类选择器 > 元素 / 伪元素,不要想着去用 后面的选择器 靠溢出覆盖 前面选择器 的样式,一般采用同级别去覆盖。

例如:

<div style="color: #f00;" id="blue" class="green">123456</div>
body #blue {
    color: #00f;
}
html body .green {
    color: #0f0;
}
div {
    color: #333;
}
color规则styleidclass元素
#f001000
#00f0101
#0f00012
#3330001

color规则从左侧一列一列作对比,#f00的style为1,其他的为0,所以最终采用样式为#f00,就不再往后考虑。

还有就是CSS规则中如果有多个声明的优先级相等的时候,CSS中最后的那个声明将会被应用到元素。

以下列出的几种选择器的优先级是不断递增的(以下内容摘自:https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity):

  1. 类型选择器(也叫元素选择器或者标签选择器,例如 h1)和 伪元素(例如 ::before)
  2. 类选择器 (例如 example),属性选择器(例如 [type=“radio”]),伪类(例如 :hover)
  3. ID选择器(例如 #example)
  4. 内联样式即直接在标签上面通过style定义的样式
  5. !important,当在一个样式声明中使用一个 !important 规则时,此声明将覆盖任何其他声明。当前如果想要覆盖 !important ,也可以通过在样式定义再通过id/class等去覆盖。

通配选择符(*),关系选择符 (+, >, ~, ’ ') 和 否定伪类(:not()) 对优先级没有影响。(但是在 :not() 内部声明的选择器是会影响优先级)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值