CSS优先级计算器 在线。选择器权重可视化

计算任何CSS选择器的优先级和确切权重。可视工具,用于理解哪个CSS规则赢得级联并避免使用!important。

VS
此选择器获胜!
0 ID
0 类/伪类
0 元素
此选择器获胜!
0 ID
0 类/伪类
0 元素
两个选择器的权重相同。如果它们竞争同一个元素,CSS中最后写的那个获胜。
工具工作室

想把这个工具添加到你的网站吗?

为 WordPress、Notion 或你自己的网站自定义配色和深色模式。

常见问题

CSS优先级是什么?

优先级是浏览器用来决定当多个规则竞争时哪个CSS规则应用于元素的算法。它以三列分数(A、B、C)表示,分别表示ID、类/属性/伪类和元素/伪元素。

类能否在优先级中击败ID?

不能直接击败。ID(1,0,0)始终击败任何数量的类(0,N,0),因为优先级在列之间没有进位。一百个类(0,100,0)永远不会击败单个ID(1,0,0)。

当两个选择器有相同的优先级时会发生什么?

当两个选择器具有完全相同的权重时,在CSS文件中最后声明的选择器获胜。这称为自然级联顺序。此计算器在出现平手时会以视觉方式警告您。

为什么使用!important被认为是不好的做法?

!important指令通过强制声明覆盖任何其他规则来破坏自然CSS级联。这在大型项目中创建了难以调试的冲突。BEM等方法倡议保持优先级平坦,以避免需要!important。

# CSS优先级是什么?

CSS优先级是浏览器用来决定将哪些属性值应用于特定元素的算法。本质上,它是一个数学分数,告诉浏览器规则"有多具体"。如果两个规则的优先级不同,无论书写顺序如何,权重较高的规则获胜。如果两者的权重相同,在源代码中最后声明的规则获胜。

# 如何计算CSS优先级

优先级根据三个类别计算,形成三列权重,通常表示为(A、B、C):
  • A列(ID): 计算唯一标识符的数量。例如:#header在A列中计为1。
  • B列(类、属性和伪类): 计算所有类(.button)、属性([type="text"])和伪类(:hover)。
  • C列(元素和伪元素): 计算所有HTML元素(divh1)和伪元素(::before)。

# 黄金法则: 列之间无进位

优先级为(0,50,0)的规则永远不会比优先级为(1,0,0)的规则更具体。单个ID击败无限个类。列永远不会相互溢出。

# !important和BEM架构的问题

!important指令是优先级规则的例外。使用时,该声明会自动覆盖任何其他规则。它被认为是不好的做法,因为它破坏了自然的级联。为了避免大型项目中的优先级争议,BEM等方法倡议仅使用单深度类选择器,人为地将优先级保持在(0,1,0)平坦。

参考文献