🐸 青蛙编程网
首页 / 前端 / CSS / 2. 选择器与优先级

2. 选择器与优先级

这是什么:选择器 = CSS 规则里「写给谁」的那部分,如 p、.tip、#main,决定样式落在哪些元素上。

为什么用:上一章知道了规则的写法,这一章解决「规则写给谁」的问题——没有选择器,规则就不知道该给谁看。

如何用:先认清 5 种基本选择器,再写一条 p { font-size: 16px; } 看它命中了页面上哪些元素。

2.1 基本选择器

选择器 语法 作用
标签选择器 p 选中所有该标签的元素
类选择器 .box 选中 class="box" 的元素
ID 选择器 #main 选中 id="main" 的元素(页面唯一)
通配符选择器 * 选中所有元素
属性选择器 [type="text"] 选中拥有该属性值的元素

示例:

<p>段落一</p>
<p class="tip">这是提示</p>
<div id="main">主区块</div>
p      { font-size: 16px; } /* 两段都会命中 */
.tip   { color: orange; }   /* 类可以复用 */
#main  { background: #eee; }/* id 全页唯一 */

你会看到:段落一是普通样式,段落二是橙色,主区块有了浅灰底。

2.2 复合选择器

选择器 语法 作用
后代选择器 nav a nav 里面所有的 a(不管多深)
子选择器 nav > a 只选 nav 的直接 a 子元素
相邻兄弟 h2 + p 紧跟在 h2 后面的那个 p
交集选择器 p.tip 既是 p 又有 tip 类
并集选择器 h1, h2, p 逗号隔开,同时命中多组

类选择器是日常使用频率最高的:给元素起名,再按名设置样式,比标签选择器精准得多。

2.3 伪类与伪元素

  • 伪类描述「状态」,冒号开头::hover(悬停)、:first-child(第一个孩子)、:focus(聚焦中)
  • 伪元素描述「某个部分」,双冒号开头:::before、::after(可插入装饰内容)
a:hover        { color: red; }      /* 鼠标悬停变红 */
li:first-child { font-weight: bold; }/* 列表第一条加粗 */

2.4 优先级(谁说了算)

当多条规则冲突时,CSS 按权重打分:

排序 选择器 权重
1 行内样式 style="" 最高
2 ID 选择器 #main 高
3 类 / 伪类 / 属性选择器 .box 中
4 标签 / 伪元素选择器 p 低
5 通配符 * 最低

三条规则记牢:

  1. 权重高的覆盖权重低的
  2. 权重相同,后写的赢
  3. 特殊值 !important 一票否决(尽量别用,会毁了维护性)
p       { color: gray; }  /* 低:标签 */
.news p { color: black; } /* 中:类+标签 */
#top p  { color: blue; }  /* 高:标签+id → 赢 */

你会看到:同时被三条规则命中的段落最终是蓝色。

记忆口诀:行内 > id > 类 > 标签 > 通配,同级比谁后写。

2.5 动手改

  1. 给标题加 :hover,悬停时变色
  2. 把一段文字同时加上类和 id 样式,观察 id 赢
  3. 在 #top p 后再写一个与它同权的规则改颜色,验证「后写>先写」

2.6 小结

  • 日常按「类选择器为主、标签选择器打底、id 少用」组织 CSS
  • 复合选择器用「空格 / > / +」表达层级关系
  • 冲突时按行内 > id > 类 > 标签判定,同级后写赢

下一章:颜色与文本样式 🐸

📥 下载本章代码

ZIP 内含本章全部代码文件与说明,解压即用,与教程内容同步生成。