应使用 标签构建术语与解释的语义化列表,其中 定义术语、 描述其含义,二者须严格成对嵌套;禁止在 中直接嵌套 或 等块级元素,复杂内容可合法置于 内但需避免嵌套 或标题等结构性元素。

用 <dl></dl> 做语义正确的带说明列表
HTML 里没有“自定义列表”这个标准术语,但你要的其实是「术语 + 解释」结构——比如参数名和它的作用、配置项和默认值。原生支持这种关系的只有 <dl></dl>(description list),它比用 <ul></ul> + 一堆 <span></span> 更语义清晰,也更利于屏幕阅读器和 SEO。
关键不是“怎么好看”,而是“怎么表达关系”。浏览器默认样式简陋,但结构对了,CSS 才好发力。
<dt></dt> 和 <dd></dd> 必须成对且嵌套正确
常见错误是把 <dt></dt> 当标题、<dd></dd> 当内容随便塞,或者漏掉 <dd></dd>。实际规则很严格:
-
<dt></dt>表示术语(可多个连续出现,比如一个词有多个同义名) -
<dd></dd>必须紧跟在<dt></dt>后,描述前面所有连续的<dt></dt> - 一个
<dl></dl>内可以有多组<dt></dt> <dd></dd>,但不能嵌套其他块级元素(如<p></p>或<div>) <p>错误写法:<code><dl> <dt>timeout</dt> <p>超时毫秒数,默认 5000</p> </dl>——<p></p>不被允许,且语义断裂。正确写法:
- timeout
- 超时毫秒数,默认 5000
- retries
- 重试次数,默认 3
用 CSS 控制缩进和分隔,避免依赖
<br>默认渲染下
<dd></dd>会缩进,但间距不可控、换行不智能。别用<br>强行折行或空行——它破坏语义,也难维护。推荐用 CSS 精确控制:
- 用
margin-block-start调整<dd></dd>上边距,实现术语与解释的垂直分离 - 给
<dt></dt>加font-weight: bold或display: inline配合margin-right实现“术语:解释”一行显示 - 如果想让多行
<dd></dd>对齐整齐,设margin-inline-start: 0并手动加 padding
示例(紧凑单行式):
dl { margin: 0; } dt { display: inline; font-weight: 600; margin-right: 0.5em; } dd { display: inline; margin: 0; }复杂说明需要内联 HTML?得包在
<dd></dd>里,但别越界<dd></dd>允许包含段落、链接、甚至<code>片段,这是合法且推荐的。比如解释里要强调某个值,或给出代码示例:- 必须是正整数。例如:
<code>1000或<code>5000。但注意边界:
- 不能在
<dd></dd>里放另一个<dl></dl>(嵌套描述列表需另起一层,且语义要合理) - 别把整个文档结构塞进去——比如不要在
<dd></dd>里放<h2></h2>或<section></section> - 如果说明本身很长、含多个段落,用
<p></p>包裹,而不是靠<br>换行
真正容易被忽略的是:当
<dd></dd>内容动态生成(比如从 JSON 渲染),得确保传入的 HTML 是可信的,否则要 escape 处理——不然<script></script>标签可能被解析执行。











