CSS 优先级

本文内容根据 CSS Specificity 整理。

首先,根据优先级从高到低,分为以下三类:

A. ID 选择器(例如,#example
B. 类选择器 (例如,.example),属性选择器(例如,[type="radio"])和伪类(例如,:hover
C. 类型选择器(例如,h1)和伪元素(例如,::before

接下来,我们要想查看一个选择器中各个优先级类别有多少个,使用 A-B-C 这个形式表示。例如:

  • x-0-0:x 表示 ID 选择器的数量。
  • 0-x-0:x 表示类、属性和伪类选择器的数量。
  • 0-0-x:x 表示类型和伪元素的数量。
  • *, +, >, ~:全局选择器没有值,当结合了其它选择器时,它们不会提升优先级。
  • :not(x):反选伪类选择器没有值,但是传递的参数会提升优先级。

示例

  • * - 0-0-0
  • div - 0-0-1
  • li > ul - 0-0-2
  • .myclass - 0-1-0
  • *.myclass - 0-1-0
    * 全局选择器没有值
  • *[type:checkbox] - 0-1-0
  • :only-of-type - 0-1-0
  • li.myclass - 0-1-1
  • li[attr] - 0-1-1
  • li:nth-of-type(3n)~li - 0-1-2
  • form input[type=email] - 0-1-2
  • li.class:nth-of-type(3n) - 0-2-1
  • input[type]:not(.class) - 0-2-1
  • #myDiv - 1-0-0
  • #myDiv li.class a[href] - 1-2-2
  • #divitis #myDiv a - 2-0-1
  • style="" - 1-0-0-0
  • !important - 1-0-0-0-0

最后两个都已经不按规则出牌了,明显超出 ID 选择器的优先级了,所以使用它们的时候需要慎重思考。

参考资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容