前端编程 课程十四、:CSS核心基础2:选择器优先级 + 伪类选择器(解决冲突+交互效果)

一、课件说明

  1. 适用人群:零基础前端学习者,已熟练掌握(4种基础选择器、2种复合选择器),能精准选中HTML元素,熟悉外部样式表开发规范。

  2. 学习时长:1天(建议6-8小时,含理论讲解+即时实操+案例练习+易错点复盘)

  3. 核心目标:掌握选择器优先级核心规则,能快速解决"样式冲突不生效"问题;精通常用伪类选择器,能实现链接交互、鼠标悬浮等基础效果;衔接前面选择器知识,形成"选中元素→设置样式→解决冲突→添加交互"的完整逻辑。

  4. 前置准备:VS Code、Chrome浏览器、沿用前面的CSS-Learn文件夹(index.html + style.css),提前回顾基础选择器、复合选择器的用法。

  5. 衔接提示:前一节课解决"如何选中元素",今天解决"选中后样式冲突怎么办""如何让元素有简单交互",为后续文字、背景样式铺垫。

二、 选择器优先级 + 伪类选择器 动画展示

1、 聚焦效果 :通过 !important 强制生效+外发光强化视觉,点击/Tab键触发;

2、 奇数项效果:第1/3/5个盒子呈现选择器优先级+红色粗体+粗边框;

3、 样式区分:每个盒子内标注对应CSS代码和样式描述,背景色/边框色不同,观查优先级覆盖关系。

代码可直接复制运行 (简单方式,代码存成后缀为.html的文件后,双击文件名运行)。

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| HTML <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>选择器优先级 + 伪类选择器 动画展示</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; font-family: "Microsoft Yahei", sans-serif; } body { padding: 40px; background-color: #f5f5f5; } .container { max-width: 1000px; margin: 0 auto; } h1 { text-align: center; color: #333; margin-bottom: 40px; } .priority-info { background: white; padding: 20px; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); margin-bottom: 30px; } .priority-info h2 { color: #444; margin-bottom: 10px; } .priority-info ul { padding-left: 20px; line-height: 1.8; color: #666; } .demo-area { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 20px; margin-top: 30px; } /* 1. 标签选择器 (0,0,0,1) */ .box { padding: 25px; border-radius: 8px; background-color: #e0f7fa; /* 浅青 */ color: #00695c; text-align: center; transition: all 0.3s ease; border: 2px solid #80cbc4; min-height: 200px; /* 统一高度,避免内容不齐 */ } /* 2. 类选择器 (0,0,1,0) - 覆盖标签样式 */ .priority-class { background-color: #f3e5f5; /* 浅紫 */ color: #7b1fa2; border-color: #ba68c8; } /* 3. ID选择器 (0,1,0,0) - 更高优先级 */ #priority-id { background-color: #fff3e0; /* 浅橙 */ color: #e65100; border-color: #ffb74d; } /* 4. 伪类 - hover (0,0,1,0) */ .box:hover { transform: scale(1.05); box-shadow: 0 5px 15px rgba(0,0,0,0.2); } /* 5. 伪类 - active (0,0,1,0) */ .box:active { transform: scale(0.98); background-color: #ffe0b2; } /* 6. 奇数项 - 强化效果,优先级提升 */ .demo-area .box:nth-child(odd) { font-weight: 900; /* 极致加粗 */ color: #d32f2f !important; /* 红色,强制覆盖其他颜色 */ border-width: 3px; /* 边框加粗,更显眼 */ } /* 7. 聚焦伪类 - 强化视觉效果 */ .focus-box { outline: none; cursor: pointer; } .focus-box:focus { border: 3px solid #2196f3 !important; /* 蓝色粗边框,强制生效 */ box-shadow: 0 0 0 6px rgba(33, 150, 243, 0.3); /* 蓝色外发光,聚焦超明显 */ } /* 8. 行内样式专属标识 */ .box h3 { margin-bottom: 15px; font-size: 18px; } .box .code { background: #f8f8f8; padding: 8px; border-radius: 4px; font-family: Consolas, monospace; font-size: 12px; margin: 10px 0; display: block; /* 独占一行 */ color: #333; } .box p { font-size: 14px; margin-top: 8px; } </style> </head> <body> <div class="container"> <h1>CSS选择器优先级 & 伪类选择器 动画展示</h1> <div class="priority-info"> <h2>选择器优先级权重规则 (行内, ID, 类/伪类, 标签)</h2> <ul> <li>行内样式: 1,0,0,0 (最高优先级)</li> <li>ID选择器: 0,1,0,0</li> <li>类选择器/伪类选择器: 0,0,1,0</li> <li>标签选择器: 0,0,0,1</li> </ul> </div> <div class="demo-area"> <!-- 1. 标签选择器 (奇数项,红色粗体+粗边框) --> <div class="box"> <h3>标签选择器</h3> <span class="code">.box { ... }</span> <p>权重: 0,0,0,1</p> <p>样式: 浅青背景+青边框</p> </div> <!-- 2. 类选择器 (偶数项,无红色) --> <div class="box priority-class"> <h3>类选择器</h3> <span class="code">.priority-class { ... }</span> <p>权重: 0,0,1,0</p> <p>样式: 浅紫背景+紫边框</p> </div> <!-- 3. ID选择器 (奇数项,红色粗体+粗边框) --> <div class="box priority-class" id="priority-id"> <h3>ID选择器</h3> <span class="code">#priority-id { ... }</span> <p>权重: 0,1,0,0</p> <p>样式: 浅橙背景+橙边框 (覆盖类)</p> </div> <!-- 4. 行内样式 (偶数项,无红色) --> <div class="box priority-class" id="priority-id" style="background-color: #e8f5e9; color: #2e7d32; border-color: #81c784;"> <h3>行内样式</h3> <span class="code">style="..."</span> <p>权重: 1,0,0,0 (最高)</p> <p>样式: 浅绿背景+绿边框 (覆盖所有)</p> </div> <!-- 5. 伪类交互 (奇数项,红色粗体+粗边框,可聚焦) --> <div class="box focus-box" tabindex="0"> <h3>伪类交互</h3> <span class="code">.focus-box:focus { ... }</span> <p>点击/Tab聚焦 → 蓝色高亮边框</p> <p>悬停放大 | 点击缩小</p> </div> <!-- 6. 结构伪类说明 (偶数项,无红色) --> <div class="box"> <h3>结构伪类</h3> <span class="code">.demo-area .box:nth-child(odd) { ... }</span> <p>奇数项: 红色粗体+粗边框</p> <p>第1/3/5个盒子就是效果</p> </div> </div> </div> </body> </html> |

操作&效果观察指南

1. 聚焦元素(蓝色高亮边框)操作步骤

① 打开HTML文件,找到标注"伪类交互"的第5个盒子;

鼠标点击这个盒子 → 立刻看到:3px蓝色粗边框 + 蓝色外发光;

③ 或按键盘Tab键 → 焦点会依次落在可聚焦元素上,当焦点到这个盒子时,同样触发高亮;

④ 点击页面空白处/按Tab切走焦点 → 高亮消失。

2. 奇数位置元素文字加粗观察方法

看盒子的文字颜色+粗细:

  • 第1个(标签选择器)、第3个(ID选择器)、第5个(伪类交互)盒子:文字是鲜红色+900极致加粗,边框也比偶数项粗;
  • 第2/4/6个盒子:文字是原有颜色,无加粗。

3. 不同选择器样式区分方法

每个盒子内部都标注了对应生效的CSS代码和样式描述,鼠标悬停时所有盒子都会放大,但:

  • 标签选择器:浅青背景+青边框;
  • 类选择器:浅紫背景+紫边框(覆盖标签样式);
  • ID选择器:浅橙背景+橙边框(覆盖类样式);
  1. 行内样式:浅绿背景+绿边框(覆盖所有选择器);
  2. 伪类交互:悬停放大/点击缩小/聚焦蓝色高亮。

、核心知识点讲解(理论+即时实操,全程手写代码,拒绝眼会手不会)

模块1:选择器优先级------解决"样式冲突不生效"

1.1 为什么要学 选择器 优先级

在实际开发中,我们常会遇到一个问题:同一个HTML元素被多个选择器匹配,且设置了冲突的样式(比如同时设置color: red和color: blue),但最终只有一个样式生效,其他样式"失效"

示例(先动手写,观察效果):

|----------------------------------------------|
| html <!-- HTML:一个div元素,被多个选择器匹配 --> 样式冲突测试 |

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| css /* 1. 元素选择器:设置文字红色 */ div { color: red; font-size: 20px; } /* 2. 类选择器:设置文字蓝色 */ .box { color: blue; } /* 3. ID选择器:设置文字绿色 */ #main-box { color: green; } |

实操观察:刷新浏览器,div文字最终是绿色,而非红色或蓝色------这就是优先级的作用:浏览器会按"优先级高低",选择生效的样式,覆盖优先级低的样式。

核心结论:学习优先级,就是掌握"浏览器选择生效样式的规则",彻底解决"样式冲突不生效"的痛点,这是前端开发中高频遇到的问题。

1.2 优先级判断规则(必记!记准不踩坑)

优先级规则可以简单理解为"权重比拼",权重越高,样式越优先生效;权重相同,按书写顺序判断。具体分3步,从高到低逐一判断,无需死记硬背,结合案例理解。

第一步:看选择器类型(核心权重,重中之重)

不同类型的选择器,权重不同,从高到低排序如下(附权重值,便于理解,无需精确记忆数值):

|--------------------------|-----------|--------------------------------------------------|
| 选择器/样式类型 | 权重值(便于理解) | 说明 |
| !important(强制优先) | 无限大 | 添加在样式声明后,强制该样式优先生效,慎用 |
| 行内样式(style属性) | 1000 | 直接写在HTML标签的style属性中,如<div style="color: pink"> |
| ID选择器(#ID名) | 100 | 第1天所学,匹配唯一元素 |
| 类选择器(.类名)、伪类选择器(:hover等) | 10 | 类选择器是开发首选,伪类选择器今天重点学 |
| 元素选择器(标签名)、伪元素选择器 | 1 | 第1天所学,批量匹配同类标签 |
| 通配符选择器(*) | 0 | 权重最低,仅用于初始化 |

即时实操(验证权重顺序):

|------------------------------------|
| html <!-- HTML:添加行内样式 --> 样式冲突测试 |

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| css /* 沿用之前的代码,新增!important */ div { color: red; /* 权重1,生效优先级最低 */ font-size: 20px; } .box { color: blue !important; /* 权重10 + !important,强制优先 */ } #main-box { color: green; /* 权重100,无!important,低于blue */ } |

实操观察:最终文字是蓝色------因为.box添加了!important,权重无限大,即使#main-box权重(100)高于.box(10),也会被覆盖;行内样式(pink,权重1000)也被!important覆盖。

第二步:看选择器数量(同类型权重,比"数量")

当选择器类型不同,但权重可叠加时,按"权重值相加"判断;同类型选择器,数量越多,权重越高。

关键提醒:权重相加不进位(比如10个类选择器=10×10=100,不等于1个ID选择器=100,但浏览器会逐位比较,先比ID数量,再比类数量,最后比元素数量)。

示例(必练,理解数量影响权重):

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| css /* 1. 1个类选择器 + 1个元素选择器:权重10+1=11 */ div.box { color: red; } /* 2. 2个类选择器:权重10+10=20 */ .box.text { color: blue; } /* 3. 1个ID选择器 + 1个类选择器:权重100+10=110 */ #main-box.box { color: green; } /* 4. 10个类选择器:权重10×10=100,不如1个ID选择器(100),但逐位比较时,ID数量为0,类数量为10,仍低于1个ID选择器 */ .box1.box2.box3.box4.box5.box6.box7.box8.box9.box10 { color: purple; } |

实操观察:最终文字是绿色------#main-box.box权重110最高,其次是.box.text(20),再是div.box(11),最后是10个类选择器(100,低于110)。

第三步:看代码书写顺序(权重完全相同时,比"顺序")

当两个选择器的权重完全相同时(比如两个类选择器、两个元素选择器),后写的样式会覆盖先写的样式------和第1天所学的"层叠规则"一致。

即时实操(验证书写顺序):

|-------------------------------------------------------------------------------------------------------------------------|
| css /* 两个类选择器,权重都是10,完全相同 */ .box { color: red; /* 先写,被覆盖 */ font-size: 20px; } .box { color: blue; /* 后写,生效 */ } |

实操观察:最终文字是蓝色------权重相同,后写的样式覆盖先写的。

1.3 优先级实战案例(综合练习,必练!)

需求:结合3步判断规则,分析以下代码的生效样式,先自己推导,再动手实操验证,彻底掌握优先级。

|------------------------------|
| html <!-- HTML --> 优先级实战测试 |

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| css /* 1. 通配符选择器(权重0) */ * { color: #000000; } /* 2. 元素选择器(权重1) */ div { color: #00ff00; } /* 3. 类选择器(权重10) */ .container { color: #0000ff; } /* 4. ID选择器(权重100) */ #content { color: #ffff00; } /* 5. 类选择器 + !important(权重无限大) */ .container { color: #ff00ff !important; } /* 6. 元素选择器 + 类选择器 + ID选择器(权重1+10+100=111) */ div.container#content { color: #00ffff; } |

推导过程(按3步判断):

  1. 第一步:看类型,.container添加了!important,权重无限大,优先级最高;
  2. 第二步:其他选择器均无!important,按权重排序:div.container#content(111)> #content(100)> .container(10)> div(1)> *(0);
  3. 第三步:权重相同的情况,此处无,无需判断顺序。

实操验证:最终文字是#ff00ff(紫色),和推导一致------重点记住:!important优先级最高,能覆盖所有无!important的样式。

1.4 优先级注意事项(避坑!开发必守)

  • 慎用!important:它的优先级最高,一旦使用,后续修改该样式时,必须也添加!important才能覆盖,滥用会导致样式混乱、维护困难;仅在"紧急修改样式,且无法通过提高选择器权重解决"时使用。
  • 不滥用ID选择器:ID选择器权重(100)远高于类选择器(10),滥用ID会导致后续用类选择器无法覆盖样式,增加开发难度------优先用类选择器,ID仅用于唯一元素。
  • 权重不进位:10个类选择器(100)≠1个ID选择器(100),浏览器会先比较ID选择器的数量(1个ID > 0个ID),再比较类选择器数量,最后比较元素选择器数量。
  • 行内样式慎用:行内样式权重(1000)很高,且混合HTML和CSS,破坏分离原则,仅用于临时测试,开发中尽量不用。
  • 继承样式无权重:子元素会继承父元素的样式(如父元素设置color: red,子元素默认继承),但继承的样式权重为0,任何直接给子元素设置的样式,都能覆盖继承样式。

1.5 优先级快速排查技巧(开发高频使用)

当样式不生效,怀疑是优先级冲突时,用Chrome开发者工具快速排查:

  1. 右键页面中"样式不生效的元素"→ 检查(或按F12),打开Elements面板;
  2. 右侧Styles面板,会显示该元素匹配的所有CSS样式;
  3. 被覆盖的样式会有删除线,鼠标悬浮在删除线上,会显示"被哪个选择器覆盖";
  4. 根据提示,提高当前选择器的权重(如添加类选择器、调整选择器组合),或调整代码书写顺序,即可解决冲突。

即时实操:打开之前的冲突案例,用开发者工具查看被删除线的样式,确认覆盖关系,动手修改权重,让指定样式生效。

模块2:伪类选择器------实现元素交互效果

2.1 伪类选择器核心认知

  1. 定义:伪类选择器是"伪类"+"选择器"的组合,语法以英文半角冒号(:) 开头,用于匹配元素的特定状态(如鼠标悬浮、链接未点击/已点击、元素获得焦点)。

  2. 核心作用:无需JavaScript,就能实现简单的交互效果,让页面更生动(如按钮悬浮变色、链接点击后变色)。

  3. 权重:伪类选择器的权重和类选择器一致(权重10),属于"权重10"的选择器类型。

  4. 本天重点:掌握"链接伪类(LVHA)"和"通用伪类(:hover、:focus)",这两个是开发中最常用的伪类选择器。

2.2 链接伪类(a标签专属,重点!LVHA原则)

链接(a标签)有4种常见状态,对应4个伪类选择器,必须按固定顺序书写(LVHA原则),否则会失效------顺序::link → :visited → :hover → :active。

记忆口诀:Link(未访问)→ Visited(已访问)→ Hover(悬浮)→ Active(点击),拼音首字母串联:L(未)→ V(已)→ H(悬)→ A(点)。

|----------|-----------------|------------------|--------------------|
| 伪类选择器 | 匹配状态 | 语法 | 常用场景 |
| :link | 未被访问过的链接 | a:link { 样式 } | 设置链接默认样式(如颜色、无下划线) |
| :visited | 已被访问过的链接 | a:visited { 样式 } | 区分已访问和未访问链接(如颜色变浅) |
| :hover | 鼠标悬浮在元素上的状态 | a:hover { 样式 } | 链接、按钮悬浮变色/加下划线 |
| :active | 鼠标点击(按住未松开)时的状态 | a:active { 样式 } | 模拟按钮"按下"效果(如颜色加深) |

即时实操:链接样式美化(开发常用)

需求:给链接设置4种状态的样式,符合LVHA顺序,实现"默认无下划线、未访问蓝色、已访问灰色、悬浮变蓝加下划线、点击变红"的效果。

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| html <!-- HTML:添加3个链接,用于测试不同状态 --> 伪类选择器学习未访问链接(百度)已访问链接(QQ,点击后刷新观察)空链接(测试悬浮和点击) |

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| css /* 保留页面初始化代码 */ * { margin: 0; padding: 0; box-sizing: border-box; } h1 { text-align: center; margin: 20px 0; color: #333; } .link-list { text-align: center; } /* 链接伪类:按LVHA顺序书写,缺一不可 */ /* 1. 未访问链接 */ a:link { color: #2196f3; /* 蓝色 */ text-decoration: none; /* 去掉默认下划线 */ margin: 0 15px; font-size: 18px; } /* 2. 已访问链接 */ a:visited { color: #999; /* 灰色 */ } /* 3. 鼠标悬浮 */ a:hover { color: #1976d2; /* 深蓝色 */ text-decoration: underline; /* 显示下划线 */ } /* 4. 鼠标点击 */ a:active { color: #ff4444; /* 红色 */ } |

实操验证:

  • 未点击百度链接:蓝色、无下划线;
  • 点击QQ链接后刷新:灰色、无下划线;
  • 鼠标悬浮在任意链接上:深蓝色、有下划线;
  • 按住链接不松开:红色、有下划线。

易错点提醒:必须按LVHA顺序书写,若把:hover写在:link前面,hover样式会被link覆盖,无法生效。

2.3 通用伪类选择器(所有元素可用,高频!)

除了链接专属伪类,以下2个伪类可用于所有元素,是开发中最常用的"交互伪类",重点掌握。

(1):hover 鼠标悬浮伪类

作用:匹配"鼠标悬浮在元素上"的状态,所有元素都可用(不仅限于a标签),核心用于实现悬浮交互效果(如按钮悬浮变色、卡片悬浮加阴影)。

即时实操:按钮悬浮效果(开发高频需求)

|-----------------------------|
| html <!-- HTML:添加2个按钮 --> |

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| css /* 按钮容器居中 */ .btn-group { text-align: center; margin: 30px 0; } /* 按钮基础样式 */ .btn { width: 100px; height: 40px; border: none; /* 去掉默认边框 */ border-radius: 4px; /* 圆角,提升美观度 */ font-size: 16px; cursor: pointer; /* 鼠标悬浮显示手型 */ margin: 0 10px; } /* 确定按钮:默认蓝色,悬浮加深 */ .primary-btn { background-color: #2196f3; color: #fff; } .primary-btn:hover { background-color: #1976d2; } /* 取消按钮:默认灰色,悬浮变浅灰 */ .cancel-btn { background-color: #f5f5f5; color: #333; } .cancel-btn:hover { background-color: #e0e0e0; } |

实操验证:鼠标悬浮在"确定"按钮上,背景色加深;悬浮在"取消"按钮上,背景色变浅,鼠标显示手型,交互效果明显。

(2):focus 焦点伪类

作用:匹配"元素获得焦点"的状态,常用于输入框(input)、文本域(textarea),核心用于提示用户"当前正在操作该元素"(如输入框选中时加边框)。

即时实操:输入框焦点样式(开发必备)

|-------------------------------|
| html <!-- HTML:添加输入框和按钮 --> |

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| css /* 表单容器 */ .form-group { text-align: center; margin: 20px 0; } /* 输入框基础样式 */ input { width: 280px; height: 40px; padding: 0 15px; border: 1px solid #ddd; /* 灰色边框 */ border-radius: 4px; font-size: 16px; margin-right: 10px; } /* 输入框获得焦点样式 */ input:focus { border-color: #2196f3; /* 蓝色边框 */ outline: none; /* 去掉默认焦点轮廓(浏览器自带,不美观) */ box-shadow: 0 0 4px rgba(33, 150, 243, 0.3); /* 浅蓝色阴影,突出焦点 */ } /* 登录按钮 */ .login-btn { background-color: #2196f3; color: #fff; border: none; width: 100px; height: 40px; border-radius: 4px; font-size: 16px; cursor: pointer; } |

实操验证:点击输入框(获得焦点),输入框边框变蓝、出现阴影;点击页面其他地方(失去焦点),恢复默认灰色边框------清晰提示用户当前操作的元素。

2.4 伪类选择器易错点梳理(避坑!)

  • 伪类选择器漏写冒号(:),导致选择器失效(如hover写成hover,正确是:a:hover)。
  • 链接伪类不按LVHA顺序书写,导致部分状态样式失效(如:hover写在:link前面)。
  • 给input设置:focus时,忘记去掉outline: none,导致浏览器默认焦点轮廓和自定义样式冲突,不美观。
  • 混淆伪类和类选择器:伪类是":开头",类选择器是".开头",两者权重相同,但作用不同(类选择器匹配元素,伪类匹配元素状态)。

模块3:当天综合练习(1小时,巩固所有知识点)

需求:结合当天所学的"选择器优先级"和"伪类选择器",制作一个简单的交互页面,衔接第1天选择器知识,独立完成,不参考课件代码。

  1. 页面结构:
  • 头部(唯一元素,用ID选择器):黑色背景、白色文字、垂直+水平居中、高度60px;
  • 标题(h1):居中、深灰色、无加粗;
  • 导航栏(nav,类选择器):嵌套ul>li>a,li横向排列、无圆点;
  • 表单区域:包含1个输入框、1个提交按钮;
  • 2个普通按钮(确定、取消)。

2.样式要求:

  • 用通配符初始化页面,清除默认边距;
  • 导航栏链接:按LVHA顺序设置样式(未访问蓝色、已访问灰色、悬浮变蓝加下划线、点击变红);
  • 按钮:设置悬浮效果(确定按钮蓝色悬浮加深,取消按钮灰色悬浮变浅);
  • 输入框:获得焦点时,蓝色边框+阴影,去掉默认轮廓;
  • 优先级测试:给导航栏的a标签,同时用元素选择器、类选择器设置颜色,确保类选择器样式生效(权重更高);
  • 用开发者工具排查样式冲突,确保所有样式正常生效。
  1. 编码规范:所有样式写在style.css,类名、ID名见名知意,添加简单注释,不滥用ID和!important。

练习验证标准:优先级无冲突,伪类交互效果正常,页面排版整洁,代码无语法错误,能独立排查样式不生效问题。

模块4:当天知识点总结+易错点复盘

4.1 核心知识点总结(必记)

  1. 优先级核心:解决"样式冲突不生效",按"!important > 行内样式 > ID > 类/伪类 > 元素 > 通配符"判断,权重相同后写覆盖先写。
  2. 伪类选择器核心:匹配元素的特定状态,无需JS实现交互,重点掌握链接伪类(LVHA顺序)和通用伪类(:hover、:focus)。
  3. 权重关键:类选择器和伪类选择器权重都是10,ID是100,行内是1000,!important无限大(慎用)。
  4. 排查技巧:用Chrome开发者工具查看被删除线的样式,快速定位优先级冲突,调整权重或顺序解决问题。

4.2 常见易错点(避坑!)

  • 优先级:滥用!important、滥用ID选择器,导致后续样式难以修改;权重相加进位的错误认知。
  • 链接伪类:不按LVHA顺序书写,导致hover、active样式失效;漏写冒号。
  • :focus伪类:给input设置:focus时,忘记去掉outline: none,出现双重焦点样式。
  • 选择器混淆:伪类(:开头)和类选择器(.开头)混淆,漏写冒号导致选择器失效。

扩展知识: 学习前端编程:DOM 树、CSSOM 树、渲染树详解

相关推荐
web打印社区2 小时前
前端实现浏览器预览打印:从原生方案到专业工具
前端·javascript·vue.js·electron
徐同保2 小时前
vue.config.ts配置代理解决跨域,配置开发环境开启source-map
前端·javascript·vue.js
HyperAI超神经2 小时前
【TVM教程】设备/目标交互
人工智能·深度学习·神经网络·microsoft·机器学习·交互·gpu算力
Hexene...2 小时前
【前端Vue】npm install时根据新的状态重新引入实际用到的包,不引入未使用到的
前端·vue.js·npm
小雨下雨的雨2 小时前
HarmonyOS 应用开发实战:高精图像处理与头像裁剪持久化技术深度解析
图像处理·人工智能·华为·ai·交互·harmonyos·鸿蒙系统
2301_780669862 小时前
Vue(入门配置、常用指令)、Ajax、Axios
前端·vue.js·ajax·javaweb
码农幻想梦2 小时前
Vue3入门到实战【尚硅谷】
前端·vue
hudou_k3 小时前
利用WebNaket实现Web应用直接访问硬件设备
前端
吃茄子的猫3 小时前
若依框架根据当前登录人信息,显示不同的静态公司logo
前端·vue