主题
HTML 进阶(四)
本页对应 HTML 进阶,共 6 段视频,约 43 分钟。
学习目标
- 能准确选用
header、nav、aside、section、footer等语义化标签搭建典型网页结构,并说明各标签对应的页面区域。 - 能使用
、<、>等字符实体在页面中正确显示空格及尖括号,并通过浏览器预览验证显示效果。 - 能独立使用
ul、li、img、h3完成“体育新闻列表”案例,页面结构清晰且图片、标题与列表项对应正确。 - 能独立使用
form、input、label、select、option、textarea、checkbox、radio、button完成“注册信息”页面,并验证输入、选择、重置等基本交互有效。 - 能根据效果图判断各区域应使用的 HTML 标签和表单控件类型,并按先搭结构、再填内容的步骤完成页面编写。
- 能使用 VS Code 常用快捷键完成新建文件、复制行、移动行、注释、保存等操作,并在编码过程中实际演示。
知识点
页面效果与完整结构
本节完成“注册信息”综合案例,主要练习各种表单控件。页面效果如下:

为什么需要:注册页信息多,必须先用标题分区,再用 form 统一包住表单控件。
怎么想:先写 h1 注册信息,再用 h2 分“个人信息、教育经历、工作经历”;表单控件先逐个写,最后套 form 也可以。
怎么做:保留下面完整结构,课堂调试时可以先写 h1、h2,再复制相同结构改文字,提高速度。
易错点:form 的 action 可先留空;标题层级要统一,h2 分区标题不要和 h1 混用。
html
<h1>注册信息</h1>
<form action="">
<!-- 表单控件 -->
<!-- 个人信息 -->
<h2>个人信息</h2>
<label>姓名:</label><input type="text" placeholder="请输入真实姓名">
<br><br>
<label>密码:</label><input type="password" placeholder="请输入密码">
<br><br>
<label>确认密码:</label><input type="password" placeholder="请输入确认密码">
<br><br>
<label>性别:</label>
<label><input type="radio" name="gender"> 男</label>
<label><input type="radio" name="gender" checked> 女</label>
<br><br>
<label>居住城市:</label>
<select>
<option>北京</option>
<option>上海</option>
<option>广州</option>
<option>深圳</option>
<option>武汉</option>
</select>
<!-- 教育经历 -->
<h2>教育经历</h2>
<label>最高学历:</label>
<select>
<option>博士</option>
<option>硕士</option>
<option>本科</option>
<option>大专</option>
</select>
<br><br>
<label>学校名称:</label><input type="text">
<br><br>
<label>所学专业:</label><input type="text">
<br><br>
<label>在校时间:</label>
<select>
<option>2015</option>
<option>2016</option>
<option>2017</option>
<option>2018</option>
</select>
--
<select>
<option>2019</option>
<option>2020</option>
<option>2021</option>
<option>2022</option>
</select>
<!-- 工作经历 -->
<h2>工作经历</h2>
<label>公司名称:</label><input type="text">
<br><br>
<label>工作描述:</label>
<br>
<textarea></textarea>
<br><br>
<!-- 协议 和 按钮 -->
<input type="checkbox"><label>已阅读并同意以下协议:</label>
<ul>
<li><a href="#">《用户服务协议》</a></li>
<li><a href="#">《隐私政策》</a></li>
</ul>
<br><br>
<button>免费注册</button>
<button type="reset">重新填写</button>
</form>个人信息区
为什么需要:姓名、密码、确认密码、性别、城市是注册页最常用控件。
怎么想:文字输入用 text,密码用 password;性别是单选,必须用 radio;城市选项多用 select。
怎么做:用 label 包住文字,点击“姓名:”也能聚焦输入框;密码框加 placeholder;两个性别 radio 的 name 写成相同值,课堂调试时点击男女测试是否只能选一个;checked 可默认选中“女”。
易错点:两个 radio 的 name 不同会变成两个独立单选框;密码框不要误写 text;placeholder 是提示文字,不是默认值。
教育经历区
为什么需要:教育经历包含学历、学校、专业、在校时间,控件类型不同。
怎么想:最高学历和年份用下拉 select,学校名称、专业用文本框;在校时间用两个下拉中间加“--”表示起止。
怎么做:先写一个 select,里面放 option,再复制改内容;文本框可直接复制学校名称结构,改 label 文字。
易错点:select 里必须写 option;两个年份下拉不要漏掉中间分隔;复制后记得改文字,避免两个“学校名称”。
工作经历区
为什么需要:工作描述可能多行,不能用单行文本框。
怎么想:公司名称用 text,工作描述用 textarea。
怎么做:复制“学校名称”一行改成“公司名称”;“工作描述”后换行写 textarea,需要多行时可在内容中加换行。
易错点:textarea 不是 input;标签名不要写成“文本玉”等同音错字,正确是文本域 textarea。
协议与按钮
为什么需要:注册前要确认协议,并提供提交与重置操作。
怎么想:同意协议用复选框 checkbox;协议条目用无序列表 ul>li>a;免费注册用提交按钮,重新填写用重置按钮。
怎么做:checkbox 默认不选中;按钮写 <button>免费注册</button>,重置写 <button type="reset">重新填写</button>。课堂调试时填写内容后点“重新填写”,能复原说明重置成功。
易错点:复选框不要误写成 radio;重置按钮的 type 是 reset,不是 rescent;提交按钮可写 type="submit",不写时按默认提交理解。
调试与检查清单
为什么需要:表单控件多,容易漏标签、漏换行、漏相同 name。
怎么想:按“标题分区→控件类型→文字提示→换行间距→测试交互”检查。
怎么做:先看页面结构是否完整,再点 label 是否聚焦、单选是否互斥、下拉是否可选、重置是否复原;间距先用 <br><br> 调整。
易错点:label 嵌套层级不要乱;select、textarea、checkbox 的单词要写对;忘记用 form 包住表单控件会导致后续提交不便。
本节要解决的问题
这节笔记看起来只是“VSCode 常用快捷键”表格,但真正要练的是:写 HTML 结构时,如何用快捷键减少重复劳动、保持层级清楚。转写稿里反复强调“先认识,忘了回来查”“能复制就复制,改改更快”“自己亲自敲一遍记忆更好”,所以下面不要求死背,而是把快捷键放进本节 dl/dt/dd 代码里理解。转写稿中把 HTML 说成“AT码”、把 shift+alt 说成“shift out”,这里按正确写法纠正。
基础编辑:复制、粘贴、剪切、保存
为什么需要:写列表、表单时大量内容是重复的,手打容易错。
怎么想:先写一个正确样本,再复制、粘贴、改文字。
怎么做:ctrl+c 复制,ctrl+v 粘贴,ctrl+x 剪切,ctrl+s 保存。转写稿案例里就是“先写第一个小 li,再复制”,不要一开始写三个再逐个改。
易错点:复制后忘记改文字,出现重复内容;改完不按 ctrl+s,页面看不到最新效果。
行操作:上移一行、快速复制一行
为什么需要:调整 dd 顺序、复制多个链接项时,拖鼠标容易乱。
怎么想:当前行要移动就用“上移”,要新增相似行就用“快速复制一行”。
怎么做:alt+上箭头 上移一行;shift+alt+下箭头 快速复制一行。比如写 <dd><a href="#">手机</a></dd> 后,用 shift+alt+下箭头 复制出多行,再把“手机”改成“电视、笔记本、平板”。
易错点:shift+alt+下箭头 是复制当前行,不是移动;复制后要检查标签是否闭合。
缩进:tab 与 shift+tab
为什么需要:HTML 靠缩进表达层级,父子关系清楚,调试时一眼能看出 dt 和 dd 属于哪个 dl。
怎么想:往里一层用 tab,往外一层用 shift+tab。笔记注释也写了:tab 往右缩进 2 个空格,shift+tab 往左缩进 2 个空格。
怎么做:选中多行 dd,按 tab 整体右移;按 shift+tab 整体左移。
易错点:只缩进一行导致层级乱;缩进不是语义,别把缩进当成标签嵌套本身。
批量修改:ctrl+d
为什么需要:多个重复文字要一起改,比如多个“联系我们”或统一链接文字。
怎么想:先选中一个词,再连续按 ctrl+d 选中下一个相同内容,一起修改。
怎么做:双击选中文字,按 ctrl+d 增加选择,再输入新文字。
易错点:选多了会误改其他位置;改完要检查每个 dd 的文字是否仍然合理。
用本节代码串起来
下面代码保留原笔记内容。写的时候可先写一个 dl,用 shift+alt+下箭头 复制 dd,用 tab/shift+tab 调层级,用 ctrl+d 批量改重复文字。
html
<!-- > 父子关系 + 兄弟关系 -->
<dl>
<dt>选购指南</dt>
<dd><a href="#">手机</a></dd>
<dd><a href="#">电视</a></dd>
<dd><a href="#">笔记本</a></dd>
<dd><a href="#">平板</a></dd>
</dl>
<dl>
<dt>选购指南</dt>
<dd><a href="#">服务中心</a></dd>
<dd><a href="#">申请售后</a></dd>
<dd><a href="#">售后政策</a></dd>
<dd><a href="#">维修服务</a></dd>
</dl>
<dl>
<dt>关注我们</dt>
<dd><a href="#">新浪微博</a></dd>
<dd><a href="#">官方微信</a></dd>
<dd><a href="#">联系我们</a></dd>
<dd><a href="#">联系我们</a></dd>
</dl>
<!-- shift + tab 往左缩进2个空格 -->
<!-- tab 往右缩进2个空格 -->易错点汇总
快捷键不要死背,先知道“有这个东西”,忘了查笔记;真正写代码时按“先写一个样本→复制→改文字→调缩进→保存预览”的顺序练。ctrl+d 是批量选相同内容,不是复制;shift+alt+下箭头 是复制行;alt+上箭头 才是移动行。转写稿里说“今天定位是认识,忘了回来查”,快捷键也一样,用多了自然熟。
课件图示


课件图示(PPTX)




代码示例
示例一:综合案例二 · 注册信息表单
html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>注册信息</title>
<style>
body { font-family: "Microsoft YaHei", sans-serif; font-size: 14px; }
form { width: 560px; margin: 0 auto; }
h1 { text-align: center; }
h2 { font-size: 16px; border-bottom: 1px solid #ddd; padding-bottom: 6px; }
label { margin-right: 6px; }
input[type="text"], input[type="password"] { width: 180px; }
textarea { width: 320px; height: 80px; }
button { padding: 4px 16px; margin-right: 12px; }
</style>
</head>
<body>
<h1>注册信息</h1>
<form action="">
<!-- 个人信息 -->
<h2>个人信息</h2>
<label>姓名:</label><input type="text" placeholder="请输入真实姓名">
<br><br>
<label>密码:</label><input type="password" placeholder="请输入密码">
<br><br>
<label>确认密码:</label><input type="password" placeholder="请输入确认密码">
<br><br>
<label>性别:</label>
<label><input type="radio" name="gender"> 男</label>
<label><input type="radio" name="gender" checked> 女</label>
<br><br>
<label>居住城市:</label>
<select>
<option>北京</option>
<option>上海</option>
<option>广州</option>
<option>深圳</option>
<option>武汉</option>
</select>
<!-- 教育经历 -->
<h2>教育经历</h2>
<label>最高学历:</label>
<select>
<option>博士</option>
<option>硕士</option>
<option>本科</option>
<option>大专</option>
</select>
<br><br>
<label>学校名称:</label><input type="text">
<br><br>
<label>所学专业:</label><input type="text">
<br><br>
<label>在校时间:</label>
<select>
<option>2015</option>
<option>2016</option>
<option>2017</option>
<option>2018</option>
</select>
--
<select>
<option>2019</option>
<option>2020</option>
<option>2021</option>
<option>2022</option>
</select>
<!-- 工作经历 -->
<h2>工作经历</h2>
<label>公司名称:</label><input type="text">
<br><br>
<label>工作描述:</label>
<br>
<textarea></textarea>
<br><br>
<!-- 协议 和 按钮 -->
<input type="checkbox"><label>已阅读并同意以下协议:</label>
<ul>
<li><a href="#">《用户服务协议》</a></li>
<li><a href="#">《隐私政策》</a></li>
</ul>
<br><br>
<button>免费注册</button>
<button type="reset">重新填写</button>
</form>
</body>
</html>要点与易错点:
form要把所有表单控件包起来(转写稿:“按道理这个表单应该被 form 包起来”),标题 h1、h2 放不放在 form 里都可以。- 标题层级要统一:
h1是“注册信息”,三个分栏标题“个人信息 / 教育经历 / 工作经历”都用h2,不要一个 h2 一个 h3,否则大小不一致。 - 文本框、密码框靠
type区分:type="text"和type="password";placeholder是输入框里的灰色提示文字,是重点要记的属性。 - 单选框必须同
name(这里都是name="gender")才能互斥,否则男女可以同时选中;checked给“女”做默认选中。 button不写 type 时默认是提交按钮;“重新填写”必须写type="reset",点了才能把表单恢复成初始状态(转写稿现场演示过)。- 易错点:这里
<label>姓名:</label><input>是分开写的,没写for/id,所以点“姓名”这两个字不会自动聚焦到输入框;想实现点击聚焦必须for="id"对应。 - 易错点:换行用的是
<br><br>,间距先这么凑合,真正调整上下边距要等学了 CSS 再用 margin/padding,不要用一堆<br>硬撑。 textarea是多行文本域(工作描述),select+option是下拉菜单,转写稿特别说明下拉菜单样式难调、实际开发常改用 div 模拟,先会用就行。
示例二:字符实体(空格与尖括号)
html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>字符实体</title>
</head>
<body>
<!-- 1. 空格:直接敲空格不管用,用 -->
<p> 这里开头空了四格,用的是 加英文分号。</p>
<!-- 2. 小于号、大于号:直接写尖括号会被当成标签解析 -->
<p>我要在页面上显示一个段落标签:<p> 这是一个段落 </p></p>
<!-- 3. 对比:这样写浏览器会直接解析成真正的段落,页面上看不到标签 -->
<p>对比下面这行:</p>
<p>这是一个段落</p>
</body>
</html>要点与易错点:
- 字符实体就是网页里预留的特殊符号,统一以
&开头、;结尾,分号不能少。 表示一个空格。HTML 里连续敲空格只算一个(或直接被忽略),想要多个空格就多写几个 。<是小于号<,>是大于号>。因为 HTML 是标签语言,尖括号会被当成标签边界;想原样显示<p>就必须写成<p>,否则浏览器直接把它解析成段落。- 易错点:段落首行缩进不要用一堆
,十个段落就要写十遍,非常麻烦;CSS 里有专门的首行缩进样式,一句话就能让所有段落生效(转写稿原话)。 - 易错点:
真正常用的场景是让两个文字之间多出一点点距离(如淘宝“亲,请登录”和“免费注册”之间),而不是拿来做排版缩进。
示例三:有语义的布局标签 + 自定义列表
html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>有语义的布局标签</title>
<style>
body { font-family: "Microsoft YaHei", sans-serif; margin: 0; }
header, nav, footer { padding: 10px 16px; }
header { background: #eee; }
nav { background: #333; color: #fff; }
.wrap { display: flex; }
section { flex: 1; padding: 10px 16px; }
aside { width: 160px; background: #f7f7f7; padding: 10px 16px; }
footer { background: #eee; display: flex; }
dl { margin: 0 40px 0 0; }
dt { font-weight: bold; margin-bottom: 6px; }
dd { margin: 0; line-height: 24px; }
a { color: #333; text-decoration: none; }
</style>
</head>
<body>
<header>头部 header</header>
<nav>导航 nav</nav>
<div class="wrap">
<section>
<article>文章内容 article</article>
</section>
<aside>侧边栏 aside</aside>
</div>
<footer>
<dl>
<dt>选购指南</dt>
<dd><a href="#">手机</a></dd>
<dd><a href="#">电视</a></dd>
<dd><a href="#">笔记本</a></dd>
<dd><a href="#">平板</a></dd>
</dl>
<dl>
<dt>选购指南</dt>
<dd><a href="#">服务中心</a></dd>
<dd><a href="#">申请售后</a></dd>
<dd><a href="#">售后政策</a></dd>
<dd><a href="#">维修服务</a></dd>
</dl>
<dl>
<dt>关注我们</dt>
<dd><a href="#">新浪微博</a></dd>
<dd><a href="#">官方微信</a></dd>
<dd><a href="#">联系我们</a></dd>
<dd><a href="#">联系我们</a></dd>
</dl>
</footer>
</body>
</html>要点与易错点:
header头部、footer底部、nav导航、aside侧边栏、section大块、article文章,这几个是 HTML5 新增的有语义标签,作用就是替换掉“满屏都是 div”的写法——看到标签名就知道这块是干什么的(转写稿原话)。- 易错点:它们默认没有任何样式,不写 CSS 时表现和 div 完全一样(都是块级、各占一行);想让它们好看,必须自己加背景、宽度、内边距。上面的 CSS 只是为了看得清结构。
- 易错点:这些标签是“认识 + 会用”,不用死背,忘了回来查;课程重点仍在无序列表、表格基本标签、文本框/密码框/placeholder、单选复选框、label、textarea、button 上。
dl是自定义列表:dt是列表标题(如“选购指南”),dd是标题下的每一项。一个dt配多个dd,一对dl就是一组,不要把三组塞进同一个dl。- 易错点:
dd默认带左缩进(margin-left),不对齐时要手动重置margin: 0。 - 提示:笔记里第二组
dt也写的是“选购指南”、第三组“联系我们”重复了两次,实际开发中应改成对应栏目名(如“服务中心”)并去掉重复项。
常见错误
性别两个单选框可以同时选中 现象:点"男"再点"女",两个都亮着,或者一个都取消不掉。 原因:两个
input的name不一致,或者其中一个漏写了name;单选按钮靠相同的name归成一组。 修法:两个radio写同一个name(如name="gender"),同一组内只允许一个checked。只能点小圆点才能选中,"男""女"文字点不动 现象:鼠标必须精确对准控件,点文字没有反应。 原因:文字没有放在
label里,label也没有通过for指向input的id。 修法:用<label><input type="radio" name="gender"> 男</label>把控件包进label;或者给input加id,再用<label for="man">男</label>关联。点"重新填写"没反应,或者一按按钮页面就跳走/刷新 现象:写好的内容清不掉,或者页面突然重载。 原因:
button不写type时默认是submit,两个按钮实际都在提交。 修法:重置按钮显式写type="reset",提交按钮写type="submit"。密码框里是明文 现象:输入的密码原样显示。 原因:
type写成text,或者复制文本框后只改了placeholder忘了改type。 修法:改成type="password",确认密码框同理。姓名、密码、城市全挤在同一行 现象:几个字段连成一长条,和设计图完全不像。 原因:
label、input、select都是行内或行内块元素,本来就不独占一行。 修法:每条字段后补<br>(本案例做法),或用块级元素包一层;最终美观靠后续 CSS 解决。提交时数据丢失 / 控件"不在表单里" 现象:某些字段填了却提交不上去,或者重置时只清了一部分。 原因:边写边加
form,导致部分控件写在了</form>外面。 修法:先搭form骨架再往里填内容,最后按缩进层级整体检查一遍开闭标签是否配对。复制粘贴后忘记改,出现重复内容 现象:确认密码的提示是"请输入密码";城市下拉里出现两个"北京";两个下拉年份完全一样。 原因:用
shift+alt+↓或ctrl+c/v复制后,只改了结构没改文字和属性。 修法:复制一行、立刻改一行,改完再复制下一行;option的年份尤其容易漏改。缩进错乱,标签层级对不上 现象:
</form>、</ul>位置漂移,展开折叠时看不出谁包着谁。 原因:手动敲空格缩进,或用tab与shift+tab时只缩进了一行。 修法:选中整块代码再按tab/shift+tab整体移动;整行搬家用alt+↑,不要手敲空格。
练习
- 打开注册页,逐个检查表单控件的
name属性并补齐;重点确认性别的两个radio用同一个name,然后点文字验证是否互斥。 - 把性别选项从"
label包裹input"改写成"input加id+label for"的写法,功能保持不变,对比两种写法的代码量。 - 用
shift+alt+↓快速补齐"在校时间"两个下拉框,左边 2015–2018、右边 2019–2022,中间用横杠隔开并保持同一行显示。 - 给"工作描述"的
textarea加上合适的rows、cols,让它默认显示 4 行左右,并保证前面的"工作描述:"标签和它不在同一行。 - 用 Emmet 的
>和+缩写一行写出form > h2 + label + input + br的结构,按tab展开后检查父子/兄弟关系是否符合预期。
原视频对照
| # | 视频 | 时长 |
|---|---|---|
| 1 | 有语义的标签 | 04:08 |
| 2 | 字符实体 | 06:53 |
| 3 | 综合案例1 | 04:52 |
| 4 | 综合案例2制作上 | 06:13 |
| 5 | 综合案例制作下 | 11:44 |
| 6 | 复习 | 09:57 |
小结
- 表单控件的分组关系由
name决定,不由位置或视觉决定;单选互斥失败的排查第一站永远是name。 label的价值在于扩大可点击区域,包裹写法和for/id写法二选一,不要两种混着写。button的默认类型是提交,凡是"重置"意图都必须显式声明type="reset"。- 本案例的字段顺序就是提交顺序,控件必须在
form内,边写边加form是数据丢失的高发动作。 - 用
<br>换行只是临时手段,它解决的是"能不能看","好不好看"留给 CSS。 - 复制粘贴是这个案例的核心效率来源,但"复制必改"要形成肌肉记忆:文字、
placeholder、type、name四项逐个过。 - 缩进和标签层级用快捷键整体调整,手敲空格是层级错乱的根源。
- 单词记不住不算错误,能查笔记写出来就是达标;后面每天都会用到,自然会记住。