CSS 特异性是无限基数

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您旅程的每个阶段提供云产品。 立即开始使用 200 美元的免费额度!

本网站上有很多关于特异性的信息。 其中最具代表性的是 CSS 特异性详解,该文章多年来已更新过几次。 在 2008 年最初发布时,它以某种误导性的方式呈现了信息。 现在它早已得到修复,但错误本身仍然很有趣。

最初的文章将特异性显示为一个整数,因此像 #main article.news p:first-child 这样的选择器将被列为 0122,表示 1 个 ID、2 个类和 2 个元素。 错误在哪里?这使得它看起来像一个十进制系统。假设特异性值为 0129——如果它是一个十进制系统,添加一个元素选择器将使其变为 0130,这绝对不是发生的事情

Jonathan Snook 最初纠正了我

…如果你有一个应用了 11 个类的元素,它不会超过具有单个 ID 选择器的元素。

以及 Eric Meyer 证实了

特异性不是十进制的。它不是任何熟悉的基数:事实上,特异性值具有无限基数

(你甚至可以在那个评论线程中找到一个正在孵化的 Harry Roberts!)

撰写关于特异性的技巧是使用逗号,这样它看起来就不会像一个数字。0122 最好写成 0, 1, 2, 2。后续更新文章中的图表更好

你可能永远不会真正写出这样的选择器,因为它过于离谱地具体,但它是一个很好的演示。

第一位表示元素是否具有内联样式,所以这实际上只是 0 或 1,但其余的理论上是无限的。我想它会是这样的

[0 or 1], ∞, ∞, ∞

较高列中的数字可以胜过任何较低列的数字。0, 1, 0, 0 胜过 0, 0, 312, 54659392。这正是为什么人们如此喜欢完全不使用 ID保持特异性扁平化