主题
HTML 进阶(三)
本页对应 HTML 进阶,共 6 段视频,约 50 分钟。
学习目标
- 能够使用
input type="file"创建文件域,并通过multiple属性实现多文件选择。 - 能够使用
select与option创建下拉表单,并使用selected指定默认选项,区分checked与selected的适用场景。 - 能够使用
textarea创建多行文本域,设置rows、cols,并正确处理默认文本内容。 - 能够使用
label的for-id关联或包裹表单控件两种方式扩大点击范围,并完成文本框、单选按钮、复选框的绑定。 - 能够使用
button的type="submit"、type="reset"、type="button"创建提交、重置和普通按钮,并使用form包裹表单使重置/提交生效。 - 能够区分
div与span的无语义布局特性:div独占一行、span同行排列,并根据页面结构选择合适标签。
知识点
本节说明与图片
本节笔记标题是“05-字符实体”,配图是字符实体对照表:

需要说明:提供的转写稿实际讲的是文件域、下拉菜单、textarea、label、按钮、form、div/span 等表单与布局内容,并没有出现“字符实体”的推导和调试过程。因此不能把表单内容硬套到本节里。转写稿中可对应的只是通用操作习惯:在编辑器中保存、刷新浏览器验证;同时纠正几个同音字: “文件语”应为“文件域”,“雷宝”应为“label”,“文本玉”应为“文本域”。这些属于表单章节,不并入下面的字符实体正文。
为什么需要字符实体
为什么需要:HTML 里 <、>、& 等符号有语法含义,浏览器会把它们当成标签或实体开头。如果直接写“3 < 5”,浏览器可能误判为标签开始,导致页面显示不正确。
怎么想:凡是“要显示成普通文字、但又会被 HTML 误解析”的字符,就考虑字符实体;特殊符号如版权号、连续空格,也可用实体表示。
怎么做:字符实体通常写成 &实体名; 或 &#数字;。例如要显示小于号,写 <;要显示大于号,写 >;要显示 &,写 &。
易错点:实体末尾的分号不能漏;实体名区分大小写;不要把 < 写成 <lt>。
常见字符实体与示例
为什么需要:常见符号在页面中经常出现,如版权号、引号、连续空格。直接输入有时能显示,但在不同环境或特殊位置下不够稳妥。
怎么想:先判断这个字符是否与 HTML 语法冲突。冲突优先用实体;不冲突的普通文字可直接写。
怎么做:常见写法如下:
html
<p>3 < 5 && 5 > 3</p>
<p>© 2024</p>
<p>姓名:张三 年龄:18</p>浏览器中会显示为:3 < 5 && 5 > 3、© 2024,以及带连续空格的文本。
易错点: 是不换行空格,不要用它大量排版;排版应交给 CSS。& 显示的是 &,不是“amp”。© 不要漏分号。
怎么做与调试过程
为什么需要:字符实体写错时,页面往往不是报错,而是直接把 < 原样显示出来,必须通过刷新页面观察结果。
怎么想:看到实体原样显示,先查三处:有没有漏分号、有没有多写 &、实体名是否拼错。
怎么做:在编辑器中写入示例,保存后刷新浏览器;再查看页面源代码或开发者工具中的 DOM,确认浏览器是把实体解析成目标字符,还是保留为文本。
易错点:不要凭记忆手写生僻实体,查对照表更稳;属性值中如果要用引号,也要注意与属性引号冲突。
小结
字符实体的核心不是“背很多表”,而是建立判断:当某个字符会被 HTML 误解析,或需要稳定显示特殊符号时,用 &...; 的形式转义。先掌握 <、>、&、"、©、 这些高频实体,再通过保存、刷新、查看显示结果来调试即可。
案例目标:先把新闻列表拆成“条目”
为什么需要: 综合案例不是孤立地背标签,而是把标签组合成真实页面结构。体育新闻列表的特点是“多条新闻重复出现”,每条都由图片和标题组成,先拆结构,后面写样式才不乱。
怎么想: 可以把整个区域看成一个列表:外层装多条新闻,每一条新闻是一个列表项,列表项里再放图片和标题。这样结构清晰,复制一条就能扩展多条。
怎么做: 按笔记给出的结构写成 ul > li > img + h3,效果参考下图:

html
<ul>
<li>
<img src="./images/1.jpg" alt="">
<h3>主帅安东尼奥回西班牙休假 国青抵达海口进行隔离</h3>
</li>
<li>
<img src="./images/2.jpg" alt="">
<h3>梅州主帅:申花有强有力的教练组 球员体能水平高</h3>
</li>
<li>
<img src="./images/3.jpg" alt="">
<h3>马德兴:00后球员将首登亚洲舞台 调整心态才务实</h3>
</li>
</ul>易错点: li 要放在 ul 里面,不要把 h3 直接写成 ul 的子元素;图片的 src 路径要真实存在;笔记代码里 alt="" 是空值,实际开发中建议补上中文说明,例如“新闻配图”,便于图片加载失败时理解内容。
用列表承载新闻:理解“盒子”和排列关系
为什么需要: 新闻条目需要上下排列、结构统一。转写稿里讲布局标签时反复强调“盒子”思维:div 是独占一行的盒子,span 是不换行、一行可放多个的盒子。这里要纠正转写稿中的同音字:“第二位”应写作 div,“ssp/span”应写作 span。本案例整条新闻适合用列表项承载,而不是把每条新闻都塞进一个不换行的小盒子。
怎么想: 先判断内容是“并列的多条”,还是“一行中的小片段”。体育新闻列表是三条并列新闻,应该纵向排开;图片和标题属于同一条新闻内部,应该包在同一个 li 里。
怎么做: 外层用 ul,每条新闻用 li,li 内先放 img,再放 h3。三条 li 结构保持一致,只改图片路径和标题文字。
易错点: 不要把 li 写成 span 来包整条新闻,否则在没有样式的情况下容易变成一行排列;不要漏掉结束标签;复制 li 后要同步修改 1.jpg/2.jpg/3.jpg 和三条标题,避免三条新闻内容重复。
图片与标题的调试:先保证能显示,再检查层级
为什么需要: 列表案例最常见的调试问题是图片不显示、标题和图片对不上。先解决“能不能显示”,再检查“结构对不对”,比一上来改样式更有效。
怎么想: img 是单标签,靠 src 找图片;h3 是双标签,包住标题文字。转写稿里讲检查元素时,会选中标签看它在页面中的盒子区域;这里也可以用同样思路检查每条 li 是否完整包住图片和标题。
怎么做: 保存后在浏览器打开页面,确认三条新闻纵向出现;如果图片不显示,依次检查 images 文件夹是否存在、文件名是否为 1.jpg、2.jpg、3.jpg、扩展名大小写是否一致;再用开发者工具查看 ul > li > img + h3 的层级是否完整。
易错点: src 拼写错误、路径少了 ./images/、图片扩展名写成 .png 都会导致加载失败;img 不需要写结束标签;h3 不要误写成 h2 或 p,否则标题层级和后续样式控制会混乱。
综合检查:让结构为后续样式预留空间
为什么需要: 综合案例先把 HTML 结构写正确,后面才能用 CSS 统一控制图片大小、标题间距和列表样式。转写稿里强调“用盒子包起来方便统一改颜色、粗细、大小”,本案例中每个 li 就是一条新闻的盒子。
怎么想: 不急着美化,先检查三条新闻是否一一对应:第一张图配第一条标题,第二张图配第二条标题,第三张图配第三条标题;结构统一后,后续给 li、img、h3 加样式才有稳定选择器。
怎么做: 对照代码逐条核对 src 和标题文字;在浏览器中确认三条新闻都出现;保留 ul/li/img/h3 的原始结构,不在 HTML 里堆无关标签。
易错点: 复制后只改标题不改图片,或只改图片不改标题,会造成图文错位;不要为了“看起来像”随意增加无语义嵌套;先完成结构,再进入样式阶段。
案例整体:先用 form 圈出“一份表单”
为什么需要:页面里散着一堆 input、select,用户点“免费注册”时,浏览器得知道要提交哪一片区域的数据。form 就是用来划分提交范围的“盒子”:点了按钮,只收集这个 form 里面的控件。
怎么想:本案例分“个人信息、教育经历、工作经历、协议与按钮”四块,它们属于同一次注册提交,所以整体套一个 form。
怎么做:

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>易错点:form 别写成 from(来自),两个单词长得像,写错整段标签就失效;action 现在留空不影响页面显示,等学了后端再说。
label:让“姓名”这两个字也能点中
为什么需要:单选按钮那个小圆点很小,手一抖就点不中;点文字“男”如果能选中按钮,体验会好很多。
怎么想:label 的作用就是给表单控件做说明文字,并和控件绑定,从而扩大点击范围。两种写法:① for 与控件的 id 同名;② 直接用 label 把文字和 input 一起包起来。
怎么做:案例里性别就是第二种写法,<label><input type="radio" name="gender"> 男</label>,点“男”字就能选中。姓名那一行写的是 <label>姓名:</label><input>,没有绑定,点“姓名”不会聚焦输入框;想生效要改成 <label for="name">姓名:</label><input id="name">,或者把 input 包进 label。
易错点:for 和 id 的值必须一模一样;label 别写成 table。
下拉菜单:selected 才是默认选中
为什么需要:城市、学历、年份选项多,用一排单选按钮太占地方,下拉菜单收起时只占一行。
怎么想:select 是“选择”,里面每个 option 是“选项”。默认选中用 selected——注意单选、复选框默认选中用的是 checked,下拉用的是 selected,两者不能混。
怎么做:案例中居住城市默认北京;如果想让武汉默认选中,写 <option selected>武汉</option>。
易错点:selected 加在 option 上,不是加在 select 上;在校时间那里两个 select 中间的 -- 只是分隔符号,不是标签。
文本域 textarea:工作描述要写多行
为什么需要:input type="text" 只能输入一行,工作描述往往要写好几段。
怎么想:需要多行文本就用双标签 textarea,中间写默认文字。
怎么做:案例里 <textarea></textarea>。调试时发现,如果写成
html
<textarea>
</textarea>打开页面输入框里会多出一段空白——标签之间的换行和空格被当成了默认内容。所以尽量写成一行。尺寸现在用 rows、cols 粗略控制,实际开发用 CSS 设宽高,并禁用右下角拖拽。
易错点:textarea 是双标签,没有 type 属性。
按钮:重置必须靠 form 才生效
为什么需要:填错了要清空重填,填完了要提交。
怎么想:button 的 type 有三个值:submit(提交,默认值)、reset(重置)、button(普通按钮,配合 JS 用)。
怎么做:<button>免费注册</button> 不写 type 就是提交;<button type="reset">重新填写</button> 点一下前面填的内容全部复原。
易错点:如果按钮没被 form 包住,点“重新填写”毫无反应——这就是案例为什么要整体套一层 form。
补充:注册页常见的文件域与布局容器
上传头像用 <input type="file">,默认一次只能选一个文件;加 multiple 属性就能按住 Ctrl 或 Shift 多选。div 和 span 都是无语义的盒子:div 独占一行,适合做上中下的区块;span 一行可放多个,适合包住“|”这类小元素,方便后面用 CSS 统一改颜色。
课件图示



代码示例
示例一:注册信息表单(综合案例二 + 文件域 / label / 按钮)
html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>注册信息</title>
</head>
<body>
<h1>注册信息</h1>
<form action="">
<!-- 个人信息 -->
<h2>个人信息</h2>
<label for="username">姓名:</label><input type="text" id="username" 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 selected>北京</option>
<option>上海</option>
<option>广州</option>
<option>深圳</option>
<option>武汉</option>
</select>
<br><br>
<label>上传头像:</label><input type="file" multiple>
<!-- 教育经历 -->
<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必须把所有控件包起来,否则<button>的提交 /<button type="reset">的重置都不生效(转写稿:重置点下去“什么都没起效果”,就是因为没有form包裹)。label两种绑定方式:①for="username"对应id="username",两者值必须完全一模一样;② 直接用label把文字和input包在一起(示例中的“男 / 女”),不用写for和id。注意单词是label,不要写成table。- 单选按钮
type="radio"的name必须相同(都是gender)才能互斥;默认选中用checked。 - 下拉框默认选中用
selected,不是checked—— 单选 / 复选框用checked,option用selected,这是最容易混的一处。 input type="file"是文件域,加multiple才能按住 Ctrl / Shift 多选文件;真正的上传要等学 JS 和后端。textarea是双标签,标签内不要换行、不要缩进,否则内容前面会多出空白;rows/cols能控制行列数,但实际开发中用 CSS 设尺寸、并禁用右下角拖拽。<button>默认type="submit";要重置写type="reset"。- 标签单双要分清:
input、br、hr是单标签;select、option、textarea、button、label是双标签。
示例二:体育新闻列表(综合案例一)
html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>体育新闻列表</title>
<style>
/* 仅用于演示排版,笔记原案例只给出了 HTML 结构 */
ul {
list-style: none;
padding: 0;
}
li {
border-bottom: 1px solid #ccc;
padding: 8px 0;
}
img {
width: 120px;
}
</style>
</head>
<body>
<ul>
<li>
<img src="./images/1.jpg" alt="体育新闻配图">
<h3>主帅安东尼奥回西班牙休假 国青抵达海口进行隔离</h3>
</li>
<li>
<img src="./images/2.jpg" alt="体育新闻配图">
<h3>梅州主帅:申花有强有力的教练组 球员体能水平高</h3>
</li>
<li>
<img src="./images/3.jpg" alt="体育新闻配图">
<h3>马德兴:00后球员将首登亚洲舞台 调整心态才务实</h3>
</li>
</ul>
</body>
</html>关键行与易错点
- 结构是
ul > li,每个li里放img+h3,li只能直接子级是ul,不要写成ul里直接塞img。 - 图片路径
./images/1.jpg是相对路径,图片文件夹要和 HTML 文件放在同一目录下,否则图片不显示。 alt是图片加载失败时的替代文字,笔记原例是alt="",实际开发建议写有意义的描述。h3自带上下外边距,与图片同排会显得间距很大,样式问题留到 CSS 课程统一处理。
示例三:div 与 span 无语义布局标签
html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>div 和 span</title>
<style>
div {
width: 100px;
height: 100px;
border: 1px solid pink;
}
span {
color: red;
}
</style>
</head>
<body>
<div>我是一个普通的盒子</div>
<div>我是第二个盒子</div>
<span>新闻</span>
<span>|</span>
<span>体育</span>
<span>音乐</span>
</body>
</html>关键行与易错点
div和span都是没有语义的盒子,本身说不出含义,作用只是“装东西、摆布局”;有语义的是h1(标题)、p(段落)、strong(加粗)这类。- 唯一区别:
div独占一行,span一行可以放多个。页面上下排列的大块用div,横向并排的小块(如“新闻 | 体育 | 音乐”中间那根竖线)用span。 - 不给 CSS 时看不出“盒子”的样子,加上
width/height/border才能看到边框范围(这正是转写稿里border: 1px solid pink的演示目的)。 - 用
span把竖线包起来,是为了以后统一改颜色、粗细;如果把竖线直接写成文字,就只能一个个改,所以span盒子很重要。
常见错误
- 上传头像只能选一个文件 → 文件域漏写
multiple,或误以为按住 Ctrl/Shift 就能多选 → 在input type="file"上补multiple,再用 Ctrl/Shift 验证多选。 - 下拉框默认项不是想要的省份 → 把
checked用到option上,或selected写错位置 → 只在目标option上加selected,单选/复选才用checked。 textarea左侧出现莫名空白、默认文字位置不对 → 开始/结束标签之间换行或缩进被当作内容 → 让textarea内容尽量贴标签写,或先清空标签间空白再放默认文字。- 点“姓名/密码/男/女”文字无法聚焦或选中 →
label的for与表单id不一致,或label拼成lable/table→ 核对for和id值完全一致;单选/复选也可用label直接包裹文字和控件。 - “重新填写”点了没反应 → 按钮和表单控件没有被同一个
form包裹,或button的type写错 → 用form包住相关控件,重置按钮写type="reset",提交按钮写type="submit"。 - 页面出现多个互不相关的提交区域,点注册把登录信息也带上 → 多个业务表单混在一个
form里 → 按业务边界拆成多个form,每个form只包自己的控件和按钮。 - 新闻列表图片和标题上下错位、导航竖线换行 → 该用
span的小元素用了div,或该分行的盒子用了span→ 大块上下结构优先div,同行小片段优先span,再用浏览器检查盒子范围。
练习
- 给“上传头像”文件域增加多选能力,并用 Ctrl/Shift 各选多个文件验证;再故意删掉
multiple,记录现象差异。 - 改造“居住城市”下拉框:默认选中“上海”;再新增一个“杭州”选项,验证展开和默认值。
- 给注册表单补全
label绑定:姓名、密码用for/id方式;性别“男/女”用label包裹控件方式,点击文字验证聚焦/选中。 - 将注册表单拆成“个人信息”“教育经历”“工作经历”三个业务区块,分别放入独立
form,测试三个区域的重置按钮只影响各自区域。 - 用
div和span各做一个“新闻标题 + 来源 + 时间”的布局草稿:要求标题独占一行,来源和时间同行;用浏览器检查盒子占行情况。
原视频对照
| # | 视频 | 时长 |
|---|---|---|
| 1 | 文件域和下拉表单 | 08:10 |
| 2 | 文本域textarea | 09:02 |
| 3 | label标签 | 10:07 |
| 4 | 按钮 | 10:28 |
| 5 | 表单复习 | 04:02 |
| 6 | div和span布局标签无语义 | 08:25 |
小结
- 表单类错误大多不是“标签不会写”,而是属性放错位置:
multiple、selected、checked、for/id要逐一核对。 textarea对标签间空白敏感,默认内容写法要固定成团队规范,避免“看起来多出空格”的低级问题。label的核心价值是扩大点击范围;能用包裹写法时优先包裹,复杂布局再用for/id。button的提交/重置效果依赖form边界,按钮无效时先查是否同属一个form,再查type。- 多个业务表单不要塞进同一个
form,否则提交和重置范围会失控。 div与span的选择看布局结果:上下分行用div,同行小片段用span,不要凭感觉混用。- 每个练习都要用浏览器实际点击、选择、重置、检查盒子范围来验收,不能只看代码是否“像对的”。