1. 引言
在前面的学习中,我们已经接触过一些常见的语义化标签。今天,我们要讨论的是「列表」。
你可能会问,什么是列表呢?其实很简单。想象一下,当你去超市购物时,通常会先写一张购物清单:
- 第一项买牛奶
- 第二项买面包
- 第三项买水果
这样的清单就是一个「列表」。
在网页中,我们同样需要把一组内容整齐地呈现出来,而 HTML 就为我们准备了对应的标签。
2. 列表的概念
列表(List) 就是一组条目(Item)的集合,用来展示具有相同属性或逻辑关系的信息。
在日常生活中,我们会经常使用列表:
- 购物清单
- 待办事项
- 课程表
- 网站菜单
在 HTML 中,列表主要分为三类:
- 有序列表(Ordered List):带顺序编号的列表。
- 无序列表(Unordered List):没有顺序,只是用符号标识的列表。
- 定义列表(Definition List):用来解释或说明某个词语的含义。
3. 有序列表(Ordered List)
3.1 标签含义(先认识“谁是谁”)
<ol>:Ordered List,有序列表容器,负责“这是一串按顺序排列的条目”。<li>:List Item,列表中的单条内容(每一行/每一项)。
最小可运行示例:
<ol>
<li>结构</li>
<li>表现</li>
<li>行为</li>
</ol>
3.2 显示效果(浏览器里到底会看到什么)
- 每个
<li>前面会自动出现编号:1、2、3…… - 编号是自动递增的:你删掉第二项,第三项会自动变成“2”。
- 整个列表会有一点缩进(不同浏览器缩进宽度略有差异,这是正常的)。
- 即使你在
<li>里没有写数字,浏览器也会给你自动加数字;数字只是“显示”,真实的内容还是你写在<li>里的文字。 - 刷新页面或复制到别的浏览器,编号逻辑不变(但缩进/样式可能略有不同,这属于浏览器默认样式差异)。
💡 小实验(建议你亲手试试)
把上面的第三个 <li> 删掉再刷新页面,你会发现:
- 原来的 1、2、3 变成了 1、2(自动对齐顺序,不需要你手动改数字)。
3.3 使用场景(什么情况必须用 <ol>)
用 <ol> 的关键点:“顺序有意义、先后不能乱”。比如:
- 操作步骤/教程(第一步、第二步……)
- 排行榜/名次(Top 10)
- 时间轴/流程(先做A,再做B)
- 考试或任务清单(必须按顺序完成)
反过来,如果条目只是平级罗列、顺序不重要(比如功能清单、联系方式等),就不要用 <ol>,而是用 <ul>(无序列表)。
3.4 具体示例(从生活任务到网页步骤)
示例 A:做一杯手冲咖啡(顺序不可乱)
<ol>
<li>烧水至 92℃ 左右</li>
<li>研磨咖啡豆(粉水比约 1:15)</li>
<li>润湿滤纸并倒掉热水</li>
<li>注水闷蒸 30 秒</li>
<li>分段注水至目标总量</li>
<li>等待滴滤完成,享用</li>
</ol>
为什么用 <ol>:如果你把“润湿滤纸”放到“分段注水”后面,就出错了——顺序是核心语义。
示例 B:活动报名流程(流程有先后)
<ol>
<li>填写报名表</li>
<li>提交资料审核</li>
<li>支付报名费用</li>
<li>收到确认邮件</li>
</ol>
3.5 进阶但实用:改变编号样式/起始值/倒序
有时你会想用 a、A、i、I 编号,或从 5 开始,或来个倒数计时。HTML 自带属性就能做到(不需要 JS):
- 把编号换成小写英文字母(a, b, c…)
<ol type="a">
<li>第一项</li>
<li>第二项</li>
</ol>
- 从指定数字开始(比如从 5 开始)
<ol start="5">
<li>第五项</li>
<li>第六项</li>
</ol>
- 倒序编号(6、5、4、3、2、1…)
<ol reversed>
<li>倒序第 6</li>
<li>倒序第 5</li>
<li>倒序第 4</li>
</ol>
- (可选)精确控制某一项的编号
有时你需要让某个<li>单独指定序号,可以用value(HTML5 允许在<li>上使用):
<ol>
<li>第 1 项</li>
<li value="10">这项强制显示为 10</li>
<li>自动接着 11</li>
</ol>
提醒:这些只是“显示编号”的控制;语义依然是“有序的列表”。
3.6 语义与可访问性(看不见的“正确”)
- 选择
<ol>是为了表达“顺序重要”。这对搜索引擎、读屏软件(无障碍)都更友好:- 读屏软件会读出“有 6 项的有序列表”,并按编号逐项朗读。
- 搜索引擎更容易理解结构(不会直接让你“SEO加分”,但能提升可读性与结构清晰度)。
- 不要用
<ul>+ CSS 把圆点改成数字来“假装有序”,这会丢失语义。
3.7 常见坑(新手最容易踩的点)
- 用换行
<br>+ 手写“1. 2. 3.”
这不是列表,编号不会自动处理、也不语义化。 - 忘记写
<li>,直接往<ol>里面塞文字
浏览器可能会容错,但这是错误写法。 - 顺序不重要却用
<ol>
这会误导读者/读屏器;应该用<ul>。 - 嵌套别忘了语义
子步骤用嵌套<ol>更清晰,例如步骤 2 下还有 “2.1 / 2.2”。
4. 无序列表(Unordered List)
4.1 标签含义(先搞清楚名字)
<ul>:Unordered List,无序列表容器。它告诉浏览器:里面的内容是一组没有先后顺序的条目。<li>:List Item,列表项,和有序列表里用法一样,用来表示列表中的一条内容。
注意:
<li>既可以放在<ol>(有序列表)里,也可以放在<ul>(无序列表)里。只是<ul>不会显示数字,而是显示一个符号。
4.2 显示效果(浏览器会渲染成什么样子)
写一段代码:
<ul>
<li>HTML</li>
<li>CSS</li>
<li>JavaScript</li>
</ul>
浏览器里的效果是:
- HTML
- CSS
- JavaScript
特点:
- 每一项前面会出现一个小圆点(•)。
- 列表整体有一个缩进。
- 不论写多少个
<li>,前面的符号都是一样的(不会像<ol>那样递增编号)。 - 符号的样式(圆点、方块、空心圆)在不同浏览器可能不太一样,但大多数情况下默认是黑色小圆点。
4.3 使用场景(什么时候用 <ul>)
核心逻辑:当条目的先后顺序不重要,只是平等罗列,就应该用 <ul>。
常见应用:
- 网站导航菜单
<ul> <li>首页</li> <li>产品</li> <li>服务</li> <li>联系我们</li> </ul> - 功能列表(产品特点、优势点)
- FAQ 问答(问题条目)
- 联系方式(电话、邮箱、地址)
💡 小技巧:实际开发中,<ul> 使用频率远高于 <ol>。因为大部分网站内容并不强调顺序,而是并列展示。
4.4 显示符号的变化
默认是小圆点,但你可以通过 CSS 改变样式:
ul {
list-style-type: square; /* 小方块 */
}
常见的取值有:
disc(默认:实心圆点)circle(空心圆点)square(小方块)none(去掉符号)
例子(无符号导航):
ul {
list-style-type: none; /* 去掉符号 */
padding: 0; /* 去掉缩进 */
}
👉 这样 <ul> 就可以被用作纯粹的菜单结构,而不会出现点点。
4.5 无序列表的嵌套(子项列表)
你可以在一个 <li> 里面再嵌套一个 <ul>:
<ul>
<li>前端
<ul>
<li>HTML</li>
<li>CSS</li>
<li>JavaScript</li>
</ul>
</li>
<li>后端</li>
</ul>
效果是:
- 前端
- HTML
- CSS
- JavaScript
- 后端
特点:
- 子列表会自动缩进一层。
- 子列表的符号样式会自动变化(小圆点 → 小方块 → 空心圆),层级不同符号不同,帮助你区分层级。
4.6 常见坑(新手容易出错的地方)
- 忘记写
<li>,直接在<ul>里写文字
浏览器可能会渲染,但语义是错误的。 - 当内容有明确顺序时还用
<ul>
例如「第一步:注册 → 第二步:付款 → 第三步:确认」就应该用<ol>,而不是<ul>。 - 去掉符号后就当作“排版容器”乱用
<ul>
这种写法很常见,但更推荐用<div>+ CSS 来布局,<ul>还是应该表示“并列的内容项”。
4.7 小练习
把下面的购物清单写成一个无序列表:
- 苹果
- 香蕉
- 橙子
- 牛奶
答案:
<ul>
<li>苹果</li>
<li>香蕉</li>
<li>橙子</li>
<li>牛奶</li>
</ul>
5. 定义列表(Definition List)
5.1 标签含义
定义列表用于表达「术语 + 解释说明」的关系。
它由三个标签组成:
<dl>:Definition List,定义列表的整体容器。<dt>:Definition Term,表示要解释的“术语”或“关键词”。<dd>:Definition Description,表示术语的“解释说明”。
这三者总是成套使用:
<dl>外层包住所有内容。<dt>表示要解释的词。<dd>表示对这个词的解释。
5.2 显示效果(浏览器里会看到什么)
示例:
<dl>
<dt>结构</dt>
<dd>网页的布局,用来规定标题、段落、区域等内容。</dd>
<dt>表现</dt>
<dd>网页的外观效果,包括颜色、字体、大小等,由 CSS 控制。</dd>
<dt>行为</dt>
<dd>网页的交互功能,例如按钮点击、表单验证,由 JavaScript 控制。</dd>
</dl>
👉 浏览器显示效果通常是这样的:
结构
网页的布局,用来规定标题、段落、区域等内容。
表现
网页的外观效果,包括颜色、字体、大小等,由 CSS 控制。
行为
网页的交互功能,例如按钮点击、表单验证,由 JavaScript 控制。
特点:
<dt>的文字会独占一行,通常是加粗显示。<dd>会在下一行缩进一些,显示为“解释内容”。- 同一个
<dt>可以有多个<dd>,表示对一个术语的多个解释。
5.3 使用场景
定义列表的语义比较特殊,一般出现在:
- 词汇表/术语表(Glossary)
- FAQ 常见问题(问题 → 解答)
- 产品参数说明(参数名 → 参数值/解释)
- 书籍/文章中的概念解释
举例:
<dl>
<dt>CPU</dt>
<dd>中央处理器,计算机的核心运算单元。</dd>
<dd>常被称为计算机的大脑。</dd>
</dl>
👉 显示效果:
CPU
中央处理器,计算机的核心运算单元。
常被称为计算机的大脑。
5.4 定义列表的嵌套(进阶)
有时你可能需要在一个解释里再放更多信息,这时可以嵌套 <ul> 或 <ol>:
<dl>
<dt>前端三件套</dt>
<dd>
<ul>
<li>HTML:负责结构</li>
<li>CSS:负责样式</li>
<li>JavaScript:负责交互</li>
</ul>
</dd>
</dl>
👉 显示效果:
前端三件套
- HTML:负责结构
- CSS:负责样式
- JavaScript:负责交互
5.5 常见坑(容易搞混的地方)
- 把
<dl>当成<ul>用
有些新手写导航菜单时错用了<dl>,其实应该用<ul>。 - 没有
<dt>就写<dd>
解释说明必须对应某个关键词,不能单独存在。 - 滥用
<dl>代替表格<dl>不是用来做表格的,参数对照表还是建议用<table>。
5.6 小练习
请把下面这段文字写成定义列表:
浏览器:用来访问网页的软件,例如 Chrome、Firefox、Safari。
服务器:存放网页文件并对外提供访问的计算机。
答案:
<dl>
<dt>浏览器</dt>
<dd>用来访问网页的软件,例如 Chrome、Firefox、Safari。</dd>
<dt>服务器</dt>
<dd>存放网页文件并对外提供访问的计算机。</dd>
</dl>
6. 列表的嵌套(Nested Lists)
6.1 什么是嵌套?
嵌套的意思是:在一个列表项 <li> 里面,再放进另一个完整的列表(可以是 <ul>、<ol>,甚至 <dl>)。
这样就能表示层级关系——大项下面有小项。
6.2 基本示例
代码示例:
<ul>
<li>前端
<ul>
<li>HTML</li>
<li>CSS</li>
<li>JavaScript</li>
</ul>
</li>
<li>后端</li>
</ul>
👉 浏览器显示效果:
- 前端
- HTML
- CSS
- JavaScript
- 后端
特点:
- 子列表自动缩进一层,比父列表靠右。
- 符号样式会改变:通常第一层是实心圆点,第二层变成小方块,第三层可能变成空心圆。
- 嵌套不限层级,理论上可以无限嵌套,但太多层会影响可读性。
6.3 有序列表嵌套
同样可以在有序列表 <ol> 里嵌套另一个 <ol>:
<ol>
<li>准备工作
<ol>
<li>安装浏览器</li>
<li>安装 VS Code</li>
</ol>
</li>
<li>开始写代码</li>
<li>运行并调试</li>
</ol>
👉 显示效果:
- 准备工作
- 安装浏览器
- 安装 VS Code
- 开始写代码
- 运行并调试
💡 注意:第二层会重新从 1 开始编号,而不是继续 3、4、5。
6.4 混合嵌套
不同类型的列表也可以互相嵌套:
<dl>
<dt>前端三件套</dt>
<dd>
<ul>
<li>HTML</li>
<li>CSS</li>
<li>JavaScript</li>
</ul>
</dd>
</dl>
👉 显示效果:
前端三件套
- HTML
- CSS
- JavaScript
6.5 使用场景
- 知识点分层(大主题 → 子主题 → 具体内容)
- 导航菜单的二级目录(例如“产品中心 → 打印机/配件/耗材”)
- 步骤中的子步骤(例如“准备工作 → 安装浏览器 / 安装编辑器”)
6.6 注意事项(避免掉坑)
- 不要嵌套太深:超过 2~3 层就容易难读,推荐使用标题或表格代替。
- 注意语义正确:
- “顺序很重要” → 用
<ol> - “只是并列罗列” → 用
<ul> - “词语+解释” → 用
<dl>
- “顺序很重要” → 用
- 样式可用 CSS 调整:缩进距离、符号样式都能自定义。
示例:让所有嵌套列表用相同的圆点样式:
ul ul {
list-style-type: disc;
}
6.7 小练习
写一个「三层嵌套」的购物清单:
- 水果
- 苹果
- 红富士
- 青苹果
- 香蕉
- 苹果
- 饮料
- 牛奶
- 可乐
答案:
<ul>
<li>水果
<ul>
<li>苹果
<ol>
<li>红富士</li>
<li>青苹果</li>
</ol>
</li>
<li>香蕉</li>
</ul>
</li>
<li>饮料
<ul>
<li>牛奶</li>
<li>可乐</li>
</ul>
</li>
</ul>
7. 实际应用:导航菜单
7.1 为什么用列表做菜单?
在网页开发中,导航菜单是最常见的结构之一。
例如:网站顶部的横向菜单、侧边栏的目录、底部的快捷链接。
这些菜单本质上就是“一组并列的选项”,而这正好符合列表(尤其是 <ul> 无序列表)的语义:
- 每一项都是平等的(首页、产品、服务、联系我们)。
- 没有先后顺序(不像步骤说明必须 1、2、3)。
- 结构清晰,方便搜索引擎和读屏软件理解。
7.2 最简单的导航菜单
代码示例:
<ul>
<li>首页</li>
<li>关于我们</li>
<li>产品中心</li>
<li>联系我们</li>
</ul>
👉 浏览器默认效果:
- 每个菜单项前面会有圆点。
- 纵向排列,每项占一行。
虽然“看起来不太像菜单”,但结构上已经对了。只需要 CSS 美化,就能变成专业的导航栏。
7.3 把菜单变横向
通过 CSS 控制 <li> 的排列方式,就能让它们横着排:
ul {
list-style-type: none; /* 去掉圆点 */
padding: 0;
margin: 0;
}
ul li {
display: inline; /* 让 <li> 横向排列 */
margin-right: 20px; /* 每个菜单项之间留点间距 */
}
👉 应用后效果:
首页 关于我们 产品中心 联系我们
这就是最常见的网站顶部导航栏。
7.4 给菜单加链接
真正的菜单不只是文字,还要能点击。我们只需在 <li> 里嵌套 <a> 标签:
<ul>
<li><a href="index.html">首页</a></li>
<li><a href="about.html">关于我们</a></li>
<li><a href="products.html">产品中心</a></li>
<li><a href="contact.html">联系我们</a></li>
</ul>
👉 点击时会跳转到对应页面。
💡 小技巧:可以给 <a> 添加 CSS,让它们看起来更像按钮或导航链接(比如加颜色、悬停效果)。
7.5 二级菜单(下拉导航)
利用 嵌套列表 可以轻松做二级菜单:
<ul>
<li>产品中心
<ul>
<li><a href="printer.html">3D 打印机</a></li>
<li><a href="scanner.html">3D 扫描仪</a></li>
<li><a href="engraver.html">激光雕刻机</a></li>
</ul>
</li>
<li>关于我们</li>
<li>联系我们</li>
</ul>
👉 默认情况下,二级菜单会直接显示在下方。配合 CSS/JavaScript,就能实现“鼠标悬停才展开”的效果。
7.6 为什么不用 <div> 做菜单?
很多新手喜欢直接用 <div> 加 <a> 来写导航菜单,看起来效果差不多,但语义性差:
- 搜索引擎和读屏器更难理解。
- 不符合 HTML 的最佳实践。
所以:
✅ 推荐:<ul><li><a></a></li></ul>
❌ 不推荐:<div><a></a></div><div><a></a></div>
7.7 小练习
请把下面的导航写成一个列表:
- 首页(链接到 index.html)
- 服务(链接到 services.html)
- 博客(链接到 blog.html)
- 联系我们(链接到 contact.html)
答案:
<ul>
<li><a href="index.html">首页</a></li>
<li><a href="services.html">服务</a></li>
<li><a href="blog.html">博客</a></li>
<li><a href="contact.html">联系我们</a></li>
</ul>

南希说









