# CSS优先级是什么?
CSS优先级是浏览器用来决定将哪些属性值应用于特定元素的算法。本质上,它是一个数学分数,告诉浏览器规则"有多具体"。如果两个规则的优先级不同,无论书写顺序如何,权重较高的规则获胜。如果两者的权重相同,在源代码中最后声明的规则获胜。# 如何计算CSS优先级
优先级根据三个类别计算,形成三列权重,通常表示为(A、B、C):- A列(ID): 计算唯一标识符的数量。例如:
#header在A列中计为1。 - B列(类、属性和伪类): 计算所有类(
.button)、属性([type="text"])和伪类(:hover)。 - C列(元素和伪元素): 计算所有HTML元素(
div、h1)和伪元素(::before)。
# 黄金法则: 列之间无进位
# !important和BEM架构的问题
!important指令是优先级规则的例外。使用时,该声明会自动覆盖任何其他规则。它被认为是不好的做法,因为它破坏了自然的级联。为了避免大型项目中的优先级争议,BEM等方法倡议仅使用单深度类选择器,人为地将优先级保持在(0,1,0)平坦。