CSS 通用选择器 (*) 特异性

CSS Universal selector (*) specificity

我想弄清楚为什么 .x*.x 具有更高的特异性,而后者有望获胜。

*.x 不应该具有 0-0-1-1 的特性(1 class,1 个标签)而 .x 只是一个 class 0-0-1-0?

考虑以下基本代码:

*.x { color: blue; }

.x { color: red }
<p class="x">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Atque, nam.</p>

应该是蓝色的。为了演示预期的行为,我将 * 替换为另一个元素 (p):

p.x { color: blue; }

.x { color: red }
<p class="x">This time it works.</p>

universal selector (*) 对特异性没有影响,因此后一个选择器的样式将被应用。

An asterisk (*) is the universal selector for CSS. It matches a single element of any type. Omitting the asterisk with simple selectors has the same effect. For instance, *.warning and .warning are considered equal.

这是意料之中的事情。 W3C 规范说,

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

  • 统计选择器中ID选择器的个数(=A)
  • 计算 class 选择器、属性选择器和 pseudo-classes 在选择器中 (= B)
  • 计算类型选择器的数量,pseudo-elements 选择器 (= C)
  • 忽略通用选择器

注意最后一个项目符号。

参考:https://www.w3.org/TR/selectors/#specificity