Skip to main content

css声明的优先级问题

选择器的特殊性

选择器的特殊性由选择器本身的组件确定,特殊性值表述为4个部分,如0,0,0,0一个选择器的具体特殊性如下确定:

  • 内联声明的特殊性都是1,0,0,0
  • 对于选择器中给定的ID属性值,加 0,1,0,0
  • 对于选择器中给定的各个类属性,属性选择,或伪类,加 0,0,1,0
  • 对于选择器中的给定的各个元素和伪元素,加0,0,0,1
  • 通配符选择器的特殊性为0,0,0,0
  • 结合符对选择器特殊性没有一点贡献
  • 继承没有特殊性
  • 特殊性相加不会进位
    • 1,0,0,0 大于所有以0开头的特殊性
    • 11个类选择器也不会大于1个Id选择器
  • 注意:id选择器和属性选择器
    • div[id="test"](0,0,1,1) 和 #test(0,1,0,0)

扩展:有趣:256个class选择器可以干掉1个id选择器

重要声明

有时某个声明比较重要,超过了所有其他声明,css2.1就称之为重要声明,并允许在这些声明的结束分号之前插入!important来标志

  • !important 总是要放在声明的最后,即分号的前面
  • 标志为 !important的声明并没有特殊的特殊性值,不过要与非重要声明分开考虑。
    • 实际上所有的重要声明会被浏览器分为一组,重要声明的冲突会在其内部解决
    • 非重要声明也会被分为一组,非重要声明的冲突也会在其内部解决
    • 如果一个重要声明与非重要声明冲突,胜出的总是重要声明

继承

  • 继承没有特殊性,甚至连0特殊性都没有
  • 0特殊性要比无特殊性来的强

来源

  • 浏览器默认样式
  • 用户样式
  • 链接样式
  • 嵌入样式
  • 行内样式

层叠

  • 先按来源排序
  • 在按选择器的特殊性排序
  • 最终按顺序