CSS选择器的优先级规则(从高到低):

1. !important 声明

.text { color: red !important; }
  • 具有最高优先级
  • 覆盖其他所有样式

2. 内联样式

<div style="color: blue;">内联样式</div>
  • 直接写在HTML元素的style属性中
  • 优先级仅次于!important

3. ID选择器

#header { color: green; }
  • 以#开头的选择器
  • 优先级高于类选择器

4. 类选择器、属性选择器、伪类选择器

.nav { color: purple; }           /* 类选择器 */
[type="text"] { color: orange; }  /* 属性选择器 */
a:hover { color: yellow; }        /* 伪类选择器 */
  • 这三种选择器优先级相同
  • 优先级高于元素选择器

5. 元素选择器、伪元素选择器

div { color: black; }        /* 元素选择器 */
p::before { color: gray; }   /* 伪元素选择器 */
  • 直接选择HTML标签
  • 优先级最低(除了通配符)

6. 通配符选择器

* { margin: 0; }
  • 优先级最低
  • 会被任何其他选择器覆盖

组合选择器的优先级

当选择器组合使用时,优先级会累加

/* 低优先级 */
p { color: black; }
 
/* 中等优先级 */
.text { color: blue; }
p.text { color: red; }        /* 元素 + 类 */
 
/* 高优先级 */
#title { color: green; }
#title.text { color: yellow; } /* ID + 类 */
#title.text p { color: purple; } /* ID + 类 + 元素 */

相同优先级的处理

当多个规则具有相同优先级时,后出现的规则覆盖前面的规则

.text { color: red; }    /* 先定义 */
.text { color: blue; }   /* 后定义,会覆盖上面的红色 */

继承的特殊性

继承的样式没有优先级,任何直接选择的样式都会覆盖继承的样式:

body { color: gray; }    /* 继承给所有子元素 */
p { color: black; }      /* 直接选择,会覆盖继承的灰色 */

实际应用示例

<div id="container" class="wrapper">
  <p class="text highlight">这是什么颜色?</p>
</div>
p { color: black; }                    /* 最低 */
.text { color: blue; }                 /* 较低 */
.highlight { color: green; }           /* 较低 */
p.text { color: red; }                 /* 中等 */
.wrapper .text { color: purple; }      /* 中等 */
#container p { color: yellow; }        /* 较高 */
#container .text { color: orange; }    /* 高 */

最终显示橙色,因为#container .text的优先级最高。