让我们用 (X, X, X, X) 来谈论特异性

Avatar of Chris Coyier
Chris Coyier

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

前几天我和 Eric Meyer 聊天,我想起了我成长过程中的一件关于 Eric Meyer 的事。 我写了一篇关于 CSS 特异性的博客文章,Eric 花时间 指出了它的误导性(我还记得我匆匆忙忙地去更新它)。 为什么会误导? 因为我将特异性描述为一个十进制系统。

假设你用 ul.nav 选择一个元素。 在那篇文章中,我暗示该选择器的特异性是 0011(本质上是十一),这是一个十进制系统中的数字。 所以我说标签 = 0,类 = 10,ID = 100,样式属性 = 1000。 如果特异性是像那样在十进制系统中计算的,那么像 ul.nav.nav.nav.nav.nav.nav.nav.nav.nav.nav.nav(11 个类名)这样的选择器将具有 0111 的特异性,这将与 ul#nav.top 相同。 这不正确。 现实情况是它将是 (0, 0, 11, 1) 与 (0, 1, 0, 1) 相比,后者明显获胜。

我刚刚使用的这种逗号分隔的语法解决了两个问题

  1. 它不会暗示十进制系统(或任何数字系统)
  2. 它具有独特且易读的外观

我喜欢 (X, X, X, X) 的外观。 我能看到将其限制为 (X, X, X),因为样式属性并不完全是选择器,通常不会在同类对话中讨论。 圆括号对我来说更清楚,但我也可以看到一个 X-X-X(以连字符分隔)语法,它不需要它们,或者一个 (X / X / X) 语法,它可能需要圆括号。

选择器级别 3 短暂地使用连字符。 级别 2 在不同的地方 使用连字符和逗号

无论如何,看来我每隔五年左右就会 提到这件事