国庆节10月1日
--


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

上一节给日期上样式时,span { color: #b2b2b2; } 里的 span 就是选择器。这一篇把它讲透:页面元素那么多,样式到底怎么”点”到你要改的那一个身上。
CSS 选择器是用来选取需要设置样式的元素(标签)的。
写样式的套路永远是两步:
1选择器 { /* ① 选谁 */2 属性: 值; /* ② 改成什么样 */3}名点得越准,样式就越不会”误伤”别的元素——这就是这一篇要练的手感。
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> 都变红:
1<style>2 h2 { color: red; } /* 页面上有几个 h2,就有几个被选中 */3</style>4<h2>所有 h2 都被选中</h2>② 类选择器——只选 class="cls" 的元素(可以有很多个,也可以挂在不同的标签上):
1<style>2 .cls { color: #ff0000; } /* 注意开头有一个点 */3</style>4<p class="cls">class 为 cls 的段落</p>5<span class="cls">class 为 cls 的文字</span>③ id 选择器——只选 id="hid" 的那一个元素(一个页面里 id 不能重复):
1<style>2 #hid { color: #b2b2b2; } /* 开头是井号 */3</style>4<span id="hid">id 为 hid 的元素</span>④ 分组选择器——一条规则同时点两拨元素,选择器之间用逗号隔开:
1<style>2 h1, h2 { color: #0000ff; } /* 所有 h1 和所有 h2 一起改 */3</style>⑤ 属性选择器——按”有没有某个属性 / 属性等不等于某个值”来选(表单里特别常用):
1<style>2 input[type] { color: red; } /* 只要写了 type 属性的 input 都选中 */3 input[type="text"] { color: gray; } /* 只选 type 等于 text 的 input */4</style>⑥ 后代选择器——只选”某个祖先里面的”元素,两个选择器之间用空格隔开:
1<style>2 form input { color: red; } /* 只改 form 里面的 input,页面别处的 input 不动 */3</style>分清两个”分隔符”:逗号是”分组”(各选各的,一起应用同一条规则),空格是”后代”(先找到前一个,再在它里面找后一个)。h1,h2 是选所有 h1 和 h2;h1 h2 是选”h1 里面的 h2”。
PPT 专门用一页提问”最为常见的三类选择器的写法”,因为它们占了日常写样式的绝大多数:
| 选择器 | 写法 | 例子 | 特点 |
|---|---|---|---|
| 元素选择器 | 标签名 {...} | span {...} | 一网打尽,页面上所有该标签都改 |
| 类选择器 | .class属性值 {...} | .cls {...} | 谁加了 class="cls" 谁被选中,可复用(多个元素共用一套样式) |
| id 选择器 | #id属性值 {...} | #time {...} | 精准到唯一的一个元素(id 在一个页面里不能重复) |
用哪个取决于”要改几个元素”:
标题区里要改的就是那行日期。课程文件 05. 央视新闻-标题-样式(选择器).html 把上一节的元素选择器换成了 id 选择器:
1<head>2 <style>3 /* 元素选择器 */4 /* span {5 color: #b2b2b2;6 } */7
8 /* 类选择器 */9 /* .cls {10 color: #ff0000;11 } */12
13 /* ID选择器 */14 #time {15 color: #b2b2b2;16 }17
18 a {19 /* 去除超链接下方的下划线 */20 text-decoration: none;21 }22 </style>23</head>24
25<body>26 <!-- 定义一个标题, 标题内容: 【新思想引领新征程】推进长江十年禁渔 谱写长江大保护新篇章 -->27 <h1>【新思想引领新征程】推进长江十年禁渔 谱写长江大保护新篇章</h1>28
29 <!-- 定义一个超链接, 里面展示 央视网 -->30 <a href="https://www.cctv.com" target="_blank">央视网</a>31
32 <!-- 日期:同时挂了 class 和 id,方便用不同方式选中它 -->33 <span class="cls" id="time">2024年05月15日 20:07</span>34</body>
#time 选中的就是这一行日期(<span> 里的内容),而 a 选中了”央视网”这个链接这段代码里有三个值得注意的地方:
#time 比 span 更精准:span 会改掉页面上所有 <span>,#time 只改挂了 id="time" 的那一个。元素上同时写了 class="cls" 和 id="time",就是留给不同选择器点的——class 负责”一批”,id 负责”唯一”。a { text-decoration: none; } 是元素选择器:把页面上所有超链接下面的下划线去掉,让”央视网”看起来像正文的一部分——这是我们第一次给”选中元素”写新属性(text-decoration 管文字修饰线)。span、.cls 两条留着,换一种选法只要把注释放开——这也说明同一条样式可以用不同选择器来写。class 和 id 都不是给用户看的,而是给”选择器”用的”门牌号”。所以先把名字挂在标签上(class="cls" id="time"),再用选择器按名字找它(.cls / #time)。
同一个元素被多条规则命中时,优先级高的赢。PPT 给的顺序:
优先级:id 选择器 → 类选择器 → 元素选择器
也就是说 #time 的规则会盖过 .cls 的规则,.cls 的规则会盖过 span 的规则。在案例里把三种都放开,最后生效的一定是 #time 那条。
两条补充规则(PPT 没展开,写代码时会碰到):
style 属性上的那种,见 06 篇)优先级比上面这些选择器都高:它是直接贴在元素身上的,选择器再精准也盖不过它。优先级冲突是”样式怎么不生效”的头号原因。排查顺序:先看有没有更高优先级的规则赢了(浏览器开发者工具里被划掉的样式就是被覆盖的),再检查属性名拼写和分号。
选择器写起来容易,起名才是长期成本。工程里通行的做法:
news-title、news-date),别用中文、空格、数字开头;news-date 好过 gray-text(颜色以后可能会改,名字就过期了);class="news-date important",用空格隔开);| 要点 | 内容 |
|---|---|
| 选择器的作用 | 选取需要设置样式的元素(标签),写法是 选择器 { 属性: 值; } |
| 六类选择器 | 元素(h1)、类(.cls)、id(#hid)、分组(h1,h2)、属性(input[type="text"])、后代(form input) |
| 最常用三类 | 元素选择器:标签名 {...};类选择器:.class属性值 {...};id 选择器:#id属性值 {...} |
| 优先级 | id 选择器 → 类选择器 → 元素选择器;优先级相同时后写的生效;行内样式优先级最高 |
| 案例里的用法 | #time 选中日期(唯一)、a 选中所有超链接去掉下划线 |
选择器 { 属性: 值; }元素名称 {...},示例 h1 {...}——选择页面上所有的 <h1> 标签.class属性值 {...},示例 .cls {...}——选择页面上所有 class 属性为 cls 的标签,可以复用(多个元素共用一套样式)#id属性值 {...},示例 #hid {...}——选择页面上 id 属性为 hid 的那一个标签(id 在页面里必须唯一)选择器1,选择器2 {...},示例 h1,h2 {...}——选择页面上所有的 <h1> 和 <h2> 标签(用逗号分隔)元素名称[属性] {...}(如 input[type],选有 type 属性的 <input>)和 元素名称[属性名="值"] {...}(如 input[type="text"],选 type 属性为 text 的 <input>)元素1 元素2 {...},示例 form input {...}——选择 <form> 标签内的所有 <input> 标签(两个选择器之间用空格分隔)style 属性)的优先级比这些选择器都高标签名 {...}、类选择器 .class属性值 {...}、id 选择器 #id属性值 {...}#time { color: #b2b2b2; } 把唯一的日期调成浅灰;a { text-decoration: none; } 把页面上所有超链接的下划线去掉 2-1 让页面上所有链接都别带下划线
页面里有好几个跳转文字(可以点击的那种),要求一条规则把它们下面的那条横线全部去掉(不要在标签上一个个改)。
(练习文件 test_07_元素选择器.html 里已经给出页面内容,样式写在 head 的样式区。)
一级 · 思路:好几个同类元素要一起改——这是”元素选择器”最擅长的场景
二级 · 方法:元素选择器写标签名;去掉文字修饰线用属性 text-decoration,值 none
三级 · 骨架:____ { text-decoration: ____; }
1/* 元素选择器:页面上所有超链接 */2a {3 /* 去除超链接下方的下划线 */4 text-decoration: none;5}对照课程 05. 央视新闻-标题-样式(选择器).html:这里就是把 a { text-decoration: none; } 抄了一遍。它选的是页面上所有 <a>——正合需求。
2-2 让两条不同的新闻摘要显示成两种颜色 页面里有两段新闻摘要,样式要求:
test_07_类选择器.html 里有这两段摘要,样式写在 head 的样式区。)一级 · 思路:要分别选中”两条不同的内容”——点一整类标签(元素选择器)会一起改,得给它们各自挂个名字
二级 · 方法:类选择器:.class属性值 { ... };名字用英文加连字符,如 .news-blue(见名知义);颜色可以用关键字、rgb 或十六进制
三级 · 骨架:.___ { color: ____; } / .___ { color: ____; },同时要在标签上写 class="____"
1<style>2 /* 第一条摘要:深蓝 */3 .news-a {4 color: #000080;5 }6 /* 第二条摘要:深红 */7 .news-b {8 color: #800000;9 }10</style>11<body>12 <p class="news-a">第一条摘要……</p>13 <p class="news-b">第二条摘要……</p>14</body>检查两点:① 两条规则不能都写同一个类名,否则后一条会覆盖前一条;② 标签上必须挂上对应的 class 属性,只写 CSS 不写名字是选不中的。
2-3 只改”这一个”日期
页面上有三处时间文字(新闻里的发布时间、正文里的时间、页脚里的更新时间)。要求:只把新闻发布时间那一处调成浅灰 #b2b2b2,另外两处保持黑色。
(练习文件 test_07_id选择器.html 里有这三处时间,样式写在 head 的样式区。)
一级 · 思路:要”精准到唯一一个元素”——元素选择器会改一片,类选择器会改一批,只有一种选择器是唯一命中的
二级 · 方法:id 选择器:#id属性值 {...};先给那一处时间写 id="time"
三级 · 骨架:<标签 id="____">时间</标签> + #____ { color: #b2b2b2; }
1<style>2 #time {3 color: #b2b2b2;4 }5</style>6<body>7 <!-- 只给这一处时间挂 id -->8 <span id="time">2024年05月15日 20:07</span>9 ...10 另外两处保持原样11</body>对照课程 05. 央视新闻-标题-样式(选择器).html:案例里 <span class="cls" id="time"> 就是这样做的。注意 id 一个页面只能出现一次——如果三处时间都要变灰,正确做法是给它们挂同一个 class,用类选择器(.date { color: #b2b2b2; })。
2-4 只给”填用户名的那一个”输入框设文字颜色
搜索框区域里有两个输入框:一个是单行文本框(用来填用户名),一个是密码框。要求:只让单行文本框里输入的文字是灰色,密码框不受影响。
(练习文件 test_07_属性选择器.html 里有这两个输入框,样式写在 head 的样式区。)
一级 · 思路:两个都是同一种输入元素,靠”标签名”分不开;但它们身上有个属性不一样——这正是属性选择器要解决的
二级 · 方法:元素名称[属性名="值"] { ... },属性的值就是”单行文本”的类型名 text
三级 · 骨架:input[____="____"] { color: ____; }
1/* 属性选择器:只选 type 属性为 text 的 input */2input[type="text"] {3 color: gray;4}对照 PPT 的属性选择器示例 input[type="text"] {...}。补充:input[type] 是”只要有 type 属性就选中”(两个输入框都会被选中),input[type="text"] 才限定到具体值。
3-1 用选择器把新闻页面的样式管起来 页面(练习文件已备好)里有:一行新闻大标题、一个来源超链接、两处日期、一块”正文区”(里面有多段文字和一张图)和一块”侧边栏”(里面也有一段文字)。按下面的步骤上样式:
#b2b2b2,要求只写一条规则、名字可复用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; }
1<style>2 /* 1. 元素选择器:所有超链接去掉下划线 */3 a {4 text-decoration: none;5 }6
7 /* 2. 类选择器:两处日期共用一套样式(名字见名知义、可复用) */8 .date {9 color: #b2b2b2;10 }11
12 /* 3. 后代选择器:只选"正文区 div 里面"的段落 */13 .content p {14 line-height: 2;15 text-indent: 2em;16 }17</style>18<body>19 <h1>【新思想引领新征程】推进长江十年禁渔 谱写长江大保护新篇章</h1>20 <a href="https://www.cctv.com" target="_blank">央视网</a>21
22 <span class="date">2024年05月15日 20:07</span>23
24 <div class="content">25 <p>央视网消息(新闻联播):……</p>26 <img src="img/1.gif" width="80%">27 <p>行走在长江沿线,科研人员发现很多可喜现象。</p>28 </div>29
30 <div class="sidebar">31 <p>侧边栏:相关阅读推荐。</p>32 </div>33
34 <span class="date">2026年09月29日 更新</span>35</body>第 4 步的答案:a 是元素选择器、.date 是类选择器,类选择器优先级更高——日期的规则不会被元素规则盖掉。把两条规则的顺序换一换不影响结果(优先级不同时,顺序不起作用;只有优先级相同时才是”后写的生效”)。
如果你喜欢,那么欢迎来到我的世界!
了解更多暂未播放



"所有的相遇都是久别重逢。"—— 未知


