7

我最近遇到过这种情况,但找不到“为什么”?谁能解释一下?

请参阅以下示例:http ://codepen.io/chriscoyier/pen/lzjqh

4

2 回答 2

12

这是由于浏览器的限制而发生的,而不是规范中的错误或浏览器如何实现它。

规范说:

选择器的特异性计算如下:

  • 计算选择器中 ID 选择器的数量 (= a)
  • 统计选择器中的类选择器、属性选择器和伪类的数量(= b)
  • 计算选择器中类型选择器和伪元素的数量 (= c)
  • 忽略通用选择器

否定伪类中的选择器与其他选择器一样计算,但否定本身不计为伪类。

连接三个数字 abc(在具有大基数的数字系统中)给出了特异性。

为了计算的目的,浏览器必须将特异性值存储为整数,并且不知何故,256 的值会导致溢出,具体取决于浏览器。这通常发生在 8 位无符号整数,最大值为 255;再添加一个会导致类级别的特异性以某种方式“升级”为 ID 级别的值,使其等于级联中的 ID,从而覆盖它。

于 2012-08-17T09:18:23.310 回答
5

这一切都在一篇文章中进行了解释:

极端特异性

于 2012-08-17T09:14:17.620 回答