CSS选择器

CSS选择器

2026年9月29日·#编程学习/javaweb学习笔记JavaWeb/CSS/前端·4392 字 22 分钟
浏览量加载中...
AI 摘要- DeepSeek

选择器用来"点名"要设样式的元素:元素/类/id/分组/属性/后代六类选择器的写法与示例、id>类>元素的优先级,以及案例里给标题区挑元素的做法

封面图
CSS选择器 - 封面图

上一节给日期上样式时,span { color: #b2b2b2; } 里的 span 就是选择器。这一篇把它讲透:页面元素那么多,样式到底怎么”点”到你要改的那一个身上。

选择器的作用#

CSS 选择器是用来选取需要设置样式的元素(标签)的。

写样式的套路永远是两步:

选择器 { /* ① 选谁 */
属性: 值; /* ② 改成什么样 */
}
  • 选择器:先”点名”,选出页面上要改的元素;
  • 声明块:给选中的元素加上一条条属性。

名点得越准,样式就越不会”误伤”别的元素——这就是这一篇要练的手感。

六类选择器#

PPT 给了一张完整的选择器表:

选择器写法示例示例说明
元素选择器元素名称 {...}h1 {...}选择页面上所有的 <h1> 标签
类选择器.class属性值 {...}.cls {...}选择页面上所有 class 属性为 cls 的标签
id 选择器#id属性值 {...}#hid {...}选择页面上 id 属性为 hid 的标签
分组选择器选择器1,选择器2 {...}h1,h2 {...}选择页面上所有的 <h1> 和 <h2> 标签
属性选择器元素名称[属性] {...}input[type] {...}选择页面上有 type 属性的 <input> 标签
元素名称[属性名="值"] {...}input[type="text"] {...}选择页面上 type 属性为 text 的 <input> 标签
后代选择器元素1 元素2 {...}form input {...}选择 <form> 标签内的所有 <input> 标签

一行行对照着看,六类选择器各自的规则与对应的 HTML 长这样:

① 元素选择器——把页面上所有 <h2> 都变红:

<style>
h2 { color: red; } /* 页面上有几个 h2,就有几个被选中 */
</style>
<h2>所有 h2 都被选中</h2>

② 类选择器——只选 class="cls" 的元素(可以有很多个,也可以挂在不同的标签上):

<style>
.cls { color: #ff0000; } /* 注意开头有一个点 */
</style>
<p class="cls">class 为 cls 的段落</p>
<span class="cls">class 为 cls 的文字</span>

③ id 选择器——只选 id="hid" 的那一个元素(一个页面里 id 不能重复):

<style>
#hid { color: #b2b2b2; } /* 开头是井号 */
</style>
<span id="hid">id 为 hid 的元素</span>

④ 分组选择器——一条规则同时点两拨元素,选择器之间用逗号隔开:

<style>
h1, h2 { color: #0000ff; } /* 所有 h1 和所有 h2 一起改 */
</style>

⑤ 属性选择器——按”有没有某个属性 / 属性等不等于某个值”来选(表单里特别常用):

<style>
input[type] { color: red; } /* 只要写了 type 属性的 input 都选中 */
input[type="text"] { color: gray; } /* 只选 type 等于 text 的 input */
</style>

⑥ 后代选择器——只选”某个祖先里面的”元素,两个选择器之间用空格隔开:

<style>
form input { color: red; } /* 只改 form 里面的 input,页面别处的 input 不动 */
</style>
Tip

分清两个”分隔符”:逗号是”分组”(各选各的,一起应用同一条规则),空格是”后代”(先找到前一个,再在它里面找后一个)。h1,h2 是选所有 h1 和 h2;h1 h2 是选”h1 里面的 h2”。

最常用的三类:元素、类、id#

PPT 专门用一页提问”最为常见的三类选择器的写法”,因为它们占了日常写样式的绝大多数:

选择器写法例子特点
元素选择器标签名 {...}span {...}一网打尽,页面上所有该标签都改
类选择器.class属性值 {...}.cls {...}谁加了 class="cls" 谁被选中,可复用(多个元素共用一套样式)
id 选择器#id属性值 {...}#time {...}精准到唯一的一个元素(id 在一个页面里不能重复)

用哪个取决于”要改几个元素”:

  • 全都要改 → 元素选择器(最省事);
  • 一批同类元素都要改 → 类选择器(比如所有”日期”都变灰);
  • 就要改某一个 → id 选择器(比如全页面只有一处的标题)。

案例实战:给标题区挑元素#

标题区里要改的就是那行日期。课程文件 05. 央视新闻-标题-样式(选择器).html 把上一节的元素选择器换成了 id 选择器:

<head>
<style>
/* 元素选择器 */
/* span {
color: #b2b2b2;
} */
/* 类选择器 */
/* .cls {
color: #ff0000;
} */
/* ID选择器 */
#time {
color: #b2b2b2;
}
a {
/* 去除超链接下方的下划线 */
text-decoration: none;
}
</style>
</head>
<body>
<!-- 定义一个标题, 标题内容: 【新思想引领新征程】推进长江十年禁渔 谱写长江大保护新篇章 -->
<h1>【新思想引领新征程】推进长江十年禁渔 谱写长江大保护新篇章</h1>
<!-- 定义一个超链接, 里面展示 央视网 -->
<a href="https://www.cctv.com" target="_blank">央视网</a>
<!-- 日期:同时挂了 class 和 id,方便用不同方式选中它 -->
<span class="cls" id="time">2024年05月15日 20:07</span>
</body>

案例里待选中的元素
图:#time 选中的就是这一行日期(<span> 里的内容),而 a 选中了”央视网”这个链接

这段代码里有三个值得注意的地方:

  1. #time 比 span 更精准:span 会改掉页面上所有 <span>,#time 只改挂了 id="time" 的那一个。元素上同时写了 class="cls" 和 id="time",就是留给不同选择器点的——class 负责”一批”,id 负责”唯一”。
  2. a { text-decoration: none; } 是元素选择器:把页面上所有超链接下面的下划线去掉,让”央视网”看起来像正文的一部分——这是我们第一次给”选中元素”写新属性(text-decoration 管文字修饰线)。
  3. 注释掉的规则不是废话:span、.cls 两条留着,换一种选法只要把注释放开——这也说明同一条样式可以用不同选择器来写。
Important

class 和 id 都不是给用户看的,而是给”选择器”用的”门牌号”。所以先把名字挂在标签上(class="cls" id="time"),再用选择器按名字找它(.cls / #time)。

优先级:谁说了算#

同一个元素被多条规则命中时,优先级高的赢。PPT 给的顺序:

优先级:id 选择器 → 类选择器 → 元素选择器

也就是说 #time 的规则会盖过 .cls 的规则,.cls 的规则会盖过 span 的规则。在案例里把三种都放开,最后生效的一定是 #time 那条。

两条补充规则(PPT 没展开,写代码时会碰到):

  • 优先级相同时,写在后面的覆盖写在前面的——这就是”层叠样式表”里”层叠”的意思;
  • 行内样式(写在标签 style 属性上的那种,见 06 篇)优先级比上面这些选择器都高:它是直接贴在元素身上的,选择器再精准也盖不过它。
Tip

优先级冲突是”样式怎么不生效”的头号原因。排查顺序:先看有没有更高优先级的规则赢了(浏览器开发者工具里被划掉的样式就是被覆盖的),再检查属性名拼写和分号。

选择器命名建议#

选择器写起来容易,起名才是长期成本。工程里通行的做法:

  • 用英文、全小写,多个单词用连字符连接(news-title、news-date),别用中文、空格、数字开头;
  • 见名知义,描述”是什么”而不是”长什么样”——news-date 好过 gray-text(颜色以后可能会改,名字就过期了);
  • 类名可以复用,多个元素、甚至同一个元素都可以有多个类名(class="news-date important",用空格隔开);
  • id 在一个页面里必须唯一:它既是选择器的门牌号,也是后面 JavaScript 找元素的抓手。

小结#

要点内容
选择器的作用选取需要设置样式的元素(标签),写法是 选择器 { 属性: 值; }
六类选择器元素(h1)、类(.cls)、id(#hid)、分组(h1,h2)、属性(input[type="text"])、后代(form input)
最常用三类元素选择器:标签名 {...};类选择器:.class属性值 {...};id 选择器:#id属性值 {...}
优先级id 选择器 → 类选择器 → 元素选择器;优先级相同时后写的生效;行内样式优先级最高
案例里的用法#time 选中日期(唯一)、a 选中所有超链接去掉下划线

相关#

练习题#

一、知识回顾(读完直接做下面的实践题)#

  1. CSS 选择器是用来选取需要设置样式的元素(标签)的;样式规则的标准写法是 选择器 { 属性: 值; }
  2. 元素选择器:写法 元素名称 {...},示例 h1 {...}——选择页面上所有的 <h1> 标签
  3. 类选择器:写法 .class属性值 {...},示例 .cls {...}——选择页面上所有 class 属性为 cls 的标签,可以复用(多个元素共用一套样式)
  4. id 选择器:写法 #id属性值 {...},示例 #hid {...}——选择页面上 id 属性为 hid 的那一个标签(id 在页面里必须唯一)
  5. 分组选择器:写法 选择器1,选择器2 {...},示例 h1,h2 {...}——选择页面上所有的 <h1> 和 <h2> 标签(用逗号分隔)
  6. 属性选择器:写法 元素名称[属性] {...}(如 input[type],选有 type 属性的 <input>)和 元素名称[属性名="值"] {...}(如 input[type="text"],选 type 属性为 text 的 <input>)
  7. 后代选择器:写法 元素1 元素2 {...},示例 form input {...}——选择 <form> 标签内的所有 <input> 标签(两个选择器之间用空格分隔)
  8. 优先级:id 选择器 → 类选择器 → 元素选择器;优先级相同时,写在后面的覆盖写在前面的;行内样式(标签 style 属性)的优先级比这些选择器都高
  9. 最常用的三类选择器写法:元素选择器 标签名 {...}、类选择器 .class属性值 {...}、id 选择器 #id属性值 {...}
  10. 案例里的两条规则:#time { color: #b2b2b2; } 把唯一的日期调成浅灰;a { text-decoration: none; } 把页面上所有超链接的下划线去掉

二、裸写题#

  • 2-1 让页面上所有链接都别带下划线 页面里有好几个跳转文字(可以点击的那种),要求一条规则把它们下面的那条横线全部去掉(不要在标签上一个个改)。 (练习文件 test_07_元素选择器.html 里已经给出页面内容,样式写在 head 的样式区。)

    提示(先自己想,实在想不出再点开)

    一级 · 思路:好几个同类元素要一起改——这是”元素选择器”最擅长的场景 二级 · 方法:元素选择器写标签名;去掉文字修饰线用属性 text-decoration,值 none 三级 · 骨架:____ { text-decoration: ____; }

    参考答案(做完再点开)
    /* 元素选择器:页面上所有超链接 */
    a {
    /* 去除超链接下方的下划线 */
    text-decoration: none;
    }

    对照课程 05. 央视新闻-标题-样式(选择器).html:这里就是把 a { text-decoration: none; } 抄了一遍。它选的是页面上所有 <a>——正合需求。

  • 2-2 让两条不同的新闻摘要显示成两种颜色 页面里有两段新闻摘要,样式要求:

    1. 第一条摘要的文字用深蓝
    2. 第二条摘要用深红
    3. 两条规则的名字要能看懂是干什么的,而且以后再加摘要时可以直接复用 (练习文件 test_07_类选择器.html 里有这两段摘要,样式写在 head 的样式区。)
    提示(先自己想,实在想不出再点开)

    一级 · 思路:要分别选中”两条不同的内容”——点一整类标签(元素选择器)会一起改,得给它们各自挂个名字 二级 · 方法:类选择器:.class属性值 { ... };名字用英文加连字符,如 .news-blue(见名知义);颜色可以用关键字、rgb 或十六进制 三级 · 骨架:.___ { color: ____; } / .___ { color: ____; },同时要在标签上写 class="____"

    参考答案(做完再点开)
    <style>
    /* 第一条摘要:深蓝 */
    .news-a {
    color: #000080;
    }
    /* 第二条摘要:深红 */
    .news-b {
    color: #800000;
    }
    </style>
    <body>
    <p class="news-a">第一条摘要……</p>
    <p class="news-b">第二条摘要……</p>
    </body>

    检查两点:① 两条规则不能都写同一个类名,否则后一条会覆盖前一条;② 标签上必须挂上对应的 class 属性,只写 CSS 不写名字是选不中的。

  • 2-3 只改”这一个”日期 页面上有三处时间文字(新闻里的发布时间、正文里的时间、页脚里的更新时间)。要求:只把新闻发布时间那一处调成浅灰 #b2b2b2,另外两处保持黑色。 (练习文件 test_07_id选择器.html 里有这三处时间,样式写在 head 的样式区。)

    提示(先自己想,实在想不出再点开)

    一级 · 思路:要”精准到唯一一个元素”——元素选择器会改一片,类选择器会改一批,只有一种选择器是唯一命中的 二级 · 方法:id 选择器:#id属性值 {...};先给那一处时间写 id="time" 三级 · 骨架:<标签 id="____">时间</标签> + #____ { color: #b2b2b2; }

    参考答案(做完再点开)
    <style>
    #time {
    color: #b2b2b2;
    }
    </style>
    <body>
    <!-- 只给这一处时间挂 id -->
    <span id="time">2024年05月15日 20:07</span>
    ...
    另外两处保持原样
    </body>

    对照课程 05. 央视新闻-标题-样式(选择器).html:案例里 <span class="cls" id="time"> 就是这样做的。注意 id 一个页面只能出现一次——如果三处时间都要变灰,正确做法是给它们挂同一个 class,用类选择器(.date { color: #b2b2b2; })。

  • 2-4 只给”填用户名的那一个”输入框设文字颜色 搜索框区域里有两个输入框:一个是单行文本框(用来填用户名),一个是密码框。要求:只让单行文本框里输入的文字是灰色,密码框不受影响。 (练习文件 test_07_属性选择器.html 里有这两个输入框,样式写在 head 的样式区。)

    提示(先自己想,实在想不出再点开)

    一级 · 思路:两个都是同一种输入元素,靠”标签名”分不开;但它们身上有个属性不一样——这正是属性选择器要解决的 二级 · 方法:元素名称[属性名="值"] { ... },属性的值就是”单行文本”的类型名 text 三级 · 骨架:input[____="____"] { color: ____; }

    参考答案(做完再点开)
    /* 属性选择器:只选 type 属性为 text 的 input */
    input[type="text"] {
    color: gray;
    }

    对照 PPT 的属性选择器示例 input[type="text"] {...}。补充:input[type] 是”只要有 type 属性就选中”(两个输入框都会被选中),input[type="text"] 才限定到具体值。

三、综合题#

  • 3-1 用选择器把新闻页面的样式管起来 页面(练习文件已备好)里有:一行新闻大标题、一个来源超链接、两处日期、一块”正文区”(里面有多段文字和一张图)和一块”侧边栏”(里面也有一段文字)。按下面的步骤上样式:

    1. 让页面上所有超链接都去掉下划线(一条规则)
    2. 把两处日期都调成浅灰 #b2b2b2,要求只写一条规则、名字可复用
    3. 只让正文区里的段落行高 2 倍、首行缩进 2 个字符;侧边栏里的段落不受影响
    4. 做完后想一想并动手验证:第 2 步那条规则和第 1 步的规则撞上同一个元素时,谁生效?把两条规则的顺序换一换,效果变不变? (练习文件 test_07_综合_标题区样式.html 里有页面内容与写作区。)
    提示(先自己想,实在想不出再点开)

    一级 · 思路:按”要改几个/在哪一片”来选选择器:全部→元素;一批同类→类;“某个区域里面的”→后代 二级 · 方法:a { text-decoration: none; };两处日期共用一个类名如 .date { color: #b2b2b2; };正文区用后代选择器 .content p { line-height: 2; text-indent: 2em; } 三级 · 骨架:____ { text-decoration: none; } / .____ { color: #b2b2b2; } / .____ ____ { line-height: ____; text-indent: ____em; }

    参考答案(做完再点开)
    <style>
    /* 1. 元素选择器:所有超链接去掉下划线 */
    a {
    text-decoration: none;
    }
    /* 2. 类选择器:两处日期共用一套样式(名字见名知义、可复用) */
    .date {
    color: #b2b2b2;
    }
    /* 3. 后代选择器:只选"正文区 div 里面"的段落 */
    .content p {
    line-height: 2;
    text-indent: 2em;
    }
    </style>
    <body>
    <h1>【新思想引领新征程】推进长江十年禁渔 谱写长江大保护新篇章</h1>
    <a href="https://www.cctv.com" target="_blank">央视网</a>
    <span class="date">2024年05月15日 20:07</span>
    <div class="content">
    <p>央视网消息(新闻联播):……</p>
    <img src="img/1.gif" width="80%">
    <p>行走在长江沿线,科研人员发现很多可喜现象。</p>
    </div>
    <div class="sidebar">
    <p>侧边栏:相关阅读推荐。</p>
    </div>
    <span class="date">2026年09月29日 更新</span>
    </body>

    第 4 步的答案:a 是元素选择器、.date 是类选择器,类选择器优先级更高——日期的规则不会被元素规则盖掉。把两条规则的顺序换一换不影响结果(优先级不同时,顺序不起作用;只有优先级相同时才是”后写的生效”)。

评论区

[ 标签 ]
# AI37# AI 编程2# AI工具1# AI绘图1# AI辅助开发2# Ajax7# Apifox1# AstrBot3# Astro2# CC Switch1# CDN2# Claude Code1# claudecode2# ClaudeCode1# Cloudflare2# CloudFlare2# CloudFlare-ImgBed3# coc4# CSS10# DeepSeek6# deepseek2# DELETE1# Docker5# EdgeOne3# Gist1# git1# GitHub1# hexo-circle-of-friends1# HTML9# HTTP10# ImageManager1# Java23# java13# JavaScript11# JavaWeb113# JDBC7# JSON2# JUnit1# LangChain25# Linux4# Logback1# Maven17# Muse Spark1# Mybatis1# MyBatis18# MySQL45# MySql1# NapCat1# Node.js1# obsidian2# Obsidian5# OpenCode4# ORM1# PathVariable1# PicGo1# PyCharm1# Python70# RequestBody1# RequestMapping1# RESTful风格1# skills1# Slf4j1# SpringBoot37# SpringMVC5# SQL2# Streamlit5# Svelte2# TailwindCSS1# Telegram3# Tlias2# Vercel1# vscode2# Vue20# Waline3# Web3# WebDAV1# Web基础6# Web开发6# WinSCP1# YAML1# 三层架构1# 中二宣言1# 书籍1# 使用文档10# 写作1# 函数2# 刷步数1# 前端52# 动态1# 动漫1# 包1# 单词2# 博客8# 博客工作流1# 博客开发2# 参数接收1# 友链1# 反思2# 后端48# 图床6# 地图1# 备份2# 大模型1# 奇思妙想1# 存储1# 学习方法6# 学校1# 宝塔面板3# 宝宝10# 实战4# 对象1# 导航栏1# 工具2# 布局2# 开发1# 开发工具1# 开发规范1# 开心1# 异常处理1# 影视2# 微信1# 性能优化2# 总结1# 想法15# 感受1# 感悟11# 指南1# 提示词工程2# 插件5# 故障排除1# 效率工具2# 教程10# 数据分析9# 数据库27# 数据结构1# 文件操作2# 斩神1# 日常95# 日志框架1# 朋友圈1# 朱元璋1# 模块1# 模板1# 正则表达式2# 测试3# 游戏2# 爬虫7# 生活迁移1# 电影2# 电脑1# 碎碎念1# 视觉识别1# 类1# 类型注解1# 网络基础2# 网络教室1# 羊毛2# 脚本2# 脚本工具1# 自动化2# 蓝奏云1# 表单1# 订阅推荐2# 记录2# 评论系统1# 词根1# 词缀1# 说说1# 足迹1# 跑步2# 路径参数1# 转载2# 运动1# 部署11# 部落冲突1# 配置1# 随机图1# 面向对象5# 音乐3# 音标1# 项目实战11# 饮食1# 驼峰命名1# 高德地图1
[ 公告 ]

如果你喜欢,那么欢迎来到我的世界!

了解更多
[ 音乐 ]
封面

音乐

暂未播放

0:000:00
暂无歌词
找不到相关结果。
[ contents ]
[ 全部文章 ]