浏览器经过优先级来判断哪一些属性值与一个元素最为相关,从而在该元素上应用这些属性值。优先级是基于 不一样种类选择器组成的匹配规则。
优先级就是分配给指定的CSS声明的一个权重,它由匹配的选择器中的每一种选择器类型的 数值 决定。前端
而当优先级与多个CSS声明中任意一个声明的优先级相等的时候,CSS中最后的那个声明将会被应用到元素上。面试
当同一个元素有多个声明的时候,优先级才会有意义。由于每个直接做用于元素的CSS规则老是会接管/覆盖(take over)该元素从祖先元素继承而来的规则。segmentfault
内联样式 > ID 选择器 > 类选择器 = 属性选择器 = 伪类选择器 > 元素(类型)选择器 = 伪元素选择器浏览器
通配选择符(universal selector)(*), 关系选择符(combinators) (+, >, ~, ' ') 和 否认伪类(negation pseudo-class)(:not()) 对优先级没有影响。(可是,在 :not() 内部声明的选择器是会影响优先级)。spa
当在一个样式声明中使用一个 !important 规则时,此声明将覆盖任何其余声明。虽然技术上 !important 与优先级无关,但 !important 却又与 CSS 优先级直接相关。调试
使用 !important 是一个坏习惯,应该尽可能避免,由于这破坏了样式表中的固有的级联规则 使得调试找 bug 变得更加困难了。当两条相互冲突的带有 !important 规则的声明被应用到相同的元素上时,拥有更大优先级的声明将会被采用。blog
扩展阅读 前端面试题-CSS选择器继承