讲解

HTML 有三种列表,覆盖绝大多数「成组内容」的场景。无序列表 <ul> 用于各项没有先后之分的内容:导航菜单、功能特性、商品参数,浏览器默认给每项加圆点。有序列表 <ol> 用于有顺序意义的内容:操作步骤、排行榜、目录章节,浏览器自动编号。<ol> 上还有几个实用属性:start="5" 从 5 开始编号(跨段续排),reversed 倒序编号(倒数榜单),type="a" 换成字母编号。编号只是渲染默认,真正的顺序语义由元素本身承载。

列表项 <li> 里可以放任意内容——文字、链接、图片,甚至再嵌套一个完整列表。嵌套列表是树形结构的标准表达:站点地图、多级导航、大纲目录都靠它。嵌套的关键写法是:子列表整个放进父级的某个 <li> 里,而不是与 <li> 平级。

第三种是描述列表 <dl>,由 <dt>(术语)和 <dd>(解释)成对组成,适合名词解释、FAQ、键值对式的信息(比如商品的「品牌:xxx / 型号:yyy」)。一个 dt 可以跟多个 dd,多个 dt 也可以共享一个 dd。导航菜单之所以推荐用 ul + li 而不是一堆 div 或 a,正是因为列表语义能让屏幕阅读器报出「列表,共 5 项」,用户立刻明白这是一组同级入口。

示例

<!-- 无序列表:导航菜单的经典写法 -->
<ul>
  <li><a href="/">首页</a></li>
  <li><a href="/docs">文档</a></li>
  <li><a href="/about">关于</a></li>
</ul>

<!-- 有序列表:步骤,从第 3 步续排 -->
<ol start="3">
  <li>保存文件为 index.html</li>
  <li>用浏览器打开查看效果</li>
</ol>

<!-- 嵌套列表:子列表放在父级 li 内部 -->
<ul>
  <li>
    前端
    <ul>
      <li>HTML</li>
      <li>CSS</li>
    </ul>
  </li>
  <li>后端</li>
</ul>

<!-- 描述列表:术语与解释 -->
<dl>
  <dt>HTML</dt>
  <dd>描述网页结构的标记语言。</dd>
  <dt>CSS</dt>
  <dd>描述网页样式的样式表语言。</dd>
</dl>

常见坑

  • li 直接当 ul 的文本用<ul> 的直接子元素只能是 <li>,文字和其他元素都必须包在 li 里。
  • 嵌套列表放错位置:子 <ul> 写在 <li>...</li> 外面、与 li 平级,是结构错误,浏览器会修复成意想不到的样子。
  • 用 ol 只为要那个编号:编号可以用 CSS 生成;选择 ol 的唯一理由应该是「顺序有语义」。同样,不想让 ul 显示圆点该用 CSS(list-style: none),而不是换标签。
  • 拿 br 或 div 堆出「假列表」:一行一个 div 看起来像列表,但对辅助技术而言只是一堆散落的盒子,失去了「这是一组 N 项」的信息。

小结

ul 管无序、ol 管有序(start/reversed/type 调整编号)、dl 管术语解释;li 内可嵌套子列表表达层级,导航菜单首选 ul。下一章学习展示结构化数据的表格。