无需登录 数据私有 本地保存

CSS优先级可视化图表 - 特异性对比

12
0
0
0

CSS 优先级可视化对比

输入多个CSS选择器,实时计算特异性(Specificity)并可视化对比,一目了然哪个选择器优先级最高

特异性对比图
内联(a) ID(b) 类/属性/伪类(c) 元素/伪元素(d)
详细对比表
排名 选择器 特异性 (a,b,c,d) 加权总分 结果
常见问题与知识点
什么是CSS特异性(Specificity)?

CSS特异性是浏览器决定哪个CSS规则应用于元素的优先级系统。它使用四元组 (a, b, c, d) 表示:
a:内联样式(style属性),值为0或1
b:ID选择器数量(如 #header
c:类选择器(.class)、属性选择器([attr])、伪类(:hover)的数量
d:元素选择器(div)、伪元素(::before)的数量
比较时从左到右逐级比较,先比a,再比b,再比c,最后比d。通配符*不计入任何层级。

:not() 伪类如何影响特异性?

:not() 本身不贡献特异性,但其内部参数选择器的特异性会被计入。 例如 :not(#id .class) 内部包含 #id(b层级+1)和 .class(c层级+1), 因此该部分贡献 (0,1,1,0)。如果参数中有多个选择器(逗号分隔),取最高的那个。

:is() 和 :where() 有什么区别?

:is() 的特异性等于其参数列表中最高特异性的选择器。 而 :where() 的特异性始终为0(零特异性),非常适合用作"低优先级"的基础样式。 :has() 的行为与 :is() 相同,取其参数中最高特异性。

伪元素(::before)和伪类(:hover)在特异性上有何不同?

伪元素(如 ::before::after)计入 d层级(与元素选择器同级), 而伪类(如 :hover:focus:nth-child())计入 c层级(与类选择器同级)。 使用单冒号的旧语法伪元素(如 :before)在特异性计算中同样按伪元素处理(d层级)。

如果两个选择器特异性完全相同怎么办?

当特异性相同时,CSS遵循源代码顺序——后出现的规则覆盖先出现的规则。 这也被称为"层叠"(Cascade)的一部分。在本工具中,相同特异性的选择器会被标记为"平局⚡"。 另外,!important 声明会超越所有特异性计算,但不推荐滥用。

属性选择器 [attr=value] 的特异性如何计算?

所有属性选择器(无论是否有值匹配)都计入 c层级,每个属性选择器贡献1。 包括:[attr][attr=val][attr^=val][attr$=val][attr*=val][attr~=val][attr|=val] 等。

通配符 * 有特异性吗?

通配符 * 的特异性为 (0,0,0,0),即零特异性。它不计入任何层级。 但 * 仍然是一个有效的选择器,可以匹配所有元素。组合器(空格、>+~)也不影响特异性。