列表与表格

并列几条信息、二维数据展示,是网页里最常见的两种内容形态。这一章讲怎么用列表(ul/ol/dl)和表格(table)正确地组织它们。

1. 无序列表 ul 和有序列表 ol

列表分两种:无序列表 ul(圆点,默认)和有序列表 ol(自动加序号)。每一项用 li(list item)包裹:

<!-- 无序列表 ul:圆点(默认),用得最多 -->
<ul>
  <li>苹果</li>
  <li>香蕉</li>
  <li>葡萄</li>
</ul>

<!-- 有序列表 ol:自动加序号 1.2.3. -->
<ol>
  <li>打开冰箱</li>
  <li>把大象放进去</li>
  <li>关上冰箱</li>
</ol>

怎么选?简单原则:顺序重要吗? 重要用 ol(步骤、排名、流程),不重要用 ul(特性、菜单、标签云)。

2. ol 的常用属性

有序列表可以通过属性控制起始数字、序号类型:

<ol start="5">
  <li>从 5 开始计数</li>
  <li>这一项是 6</li>
</ol>

<!-- reversed:倒序 -->
<ol reversed>
  <li>第一项(显示为 3)</li>
  <li>第二项(显示为 2)</li>
  <li>第三项(显示为 1)</li>
</ol>

<!-- type:改成字母或罗马数字 -->
<ol type="A">    <!-- A. B. C. -->
<ol type="a">    <!-- a. b. c. -->
<ol type="I">    <!-- I. II. III. 罗马数字 -->
<ol type="i">    <!-- i. ii. iii. 小写罗马 -->

<!-- 单项改序号 -->
<ol>
  <li>第一项</li>
  <li value="10">跳到 10</li>
  <li>这一项是 11</li>
</ol>

这些属性很少用,但偶尔做教程目录、合同条款时会用到。

3. 嵌套列表

列表可以嵌套,做成多级目录。关键是内层 ul 必须放在外层 li 里面,不能直接放在 ul 里:

<ul>
  <li>水果
    <ul>
      <li>苹果</li>
      <li>香蕉</li>
    </ul>
  </li>
  <li>蔬菜
    <ul>
      <li>白菜</li>
      <li>萝卜</li>
    </ul>
  </li>
</ul>
<!-- 嵌套时,内层 ul 必须放在 li 里面 -->

这是新手最容易写错的地方——记住"内容(包括子列表)都属于当前 li"。

4. 定义列表 dl

还有一种特殊的列表,用于"术语 + 解释"的成对信息,如词典、 FAQ。用 dl(description list):

<dl>
  <dt>HTML</dt>
  <dd>超文本标记语言,网页的骨架。</dd>

  <dt>CSS</dt>
  <dd>层叠样式表,负责外观。</dd>

  <dt>JavaScript</dt>
  <dd>脚本语言,负责交互。</dd>
</dl>
<!-- dl = description list 描述列表
     dt = description term 术语
     dd = description detail 详细说明 -->

一个 dt 可以配多个 dd(一个术语有多条解释),反之亦然。做名词解释、 FAQ 折叠面板时很好用。

5. 列表使用场景

导航菜单、商品特性、步骤说明、面包屑、评论列表……列表在网页里几乎无处不在。养成一个习惯:需要并列几条信息时,第一反应是"用列表"而不是"用一堆 div"。这样代码更语义化、CSS 更好写、SEO 更友好。

6. 表格 table 基本结构

展示二维数据(行列)用 table。完整结构包含 thead(表头)、tbody(表体)、tfoot(表尾),每行 tr,每个单元格 td(普通)或 th(表头,默认加粗居中):

<table>
  <thead>
    <tr>
      <th>姓名</th>
      <th>年龄</th>
      <th>城市</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>小明</td>
      <td>20</td>
      <td>北京</td>
    </tr>
    <tr>
      <td>小红</td>
      <td>22</td>
      <td>上海</td>
    </tr>
  </tbody>
  <tfoot>
    <tr>
      <td>合计</td>
      <td>2 人</td>
      <td>-</td>
    </tr>
  </tfoot>
</table>

几个要点:

7. 合并单元格 colspan 和 rowspan

需要把几个单元格合并成一个时用 colspan(横向合并)和 rowspan(纵向合并):

<table>
  <tr>
    <th>姓名</th>
    <th colspan="2">联系方式</th>
  </tr>
  <tr>
    <td>小明</td>
    <td>电话:138...</td>
    <td>邮箱:xm@...</td>
  </tr>
  <tr>
    <td colspan="3">备注:以上信息保密</td>
  </tr>
</table>
<!-- colspan 横向合并单元格;
     rowspan 纵向合并(数字是跨几行) -->

合并单元格是表格里最容易出错的地方,新手常常算错列数导致表格错位。数清楚每行 td 的总宽度是否一致(合并算 N,就少写 N-1 个 td)。

8. 表格的常见陷阱

表格虽简单,但有几个坑:

9. 实战示例:一个销售数据表

把所有概念组合起来,做一个真实场景的表格:

<table>
  <thead>
    <tr>
      <th>姓名</th>
      <th>年龄</th>
      <th>城市</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>小明</td>
      <td>20</td>
      <td>北京</td>
    </tr>
    <tr>
      <td>小红</td>
      <td>22</td>
      <td>上海</td>
    </tr>
  </tbody>
  <tfoot>
    <tr>
      <td>合计</td>
      <td>2 人</td>
      <td>-</td>
    </tr>
  </tfoot>
</table>

结构清晰:表头让数据一目了然,合计行单独放在 tfoot 便于维护。

10. 给表格加 CSS

原生的 table 没有边框和间距,看着很丑。常见的 CSS 样式:

小结

这一章你学会了三种列表(ul、ol、dl)和表格的完整结构,知道了什么时候用列表、什么时候用表格。记住几个原则:并列信息用列表二维数据用表格页面布局永远不用 table。下一篇我们看网页交互的入口——表单

← 上一篇 链接与图片

下一篇 表单

✈️💬