dfn 标签仅在术语首次出现且紧邻明确定义语句时使用;必须满足三条件:首次出现、紧邻定义(如“是……”)、属专业概念;需置于语义块级元素内,title 属性优先用于提取定义。

dfn 标签不是加斜体的快捷键,也不是强调词——它只在术语**首次出现且紧邻明确定义语句**时才该用;用错等于给屏幕阅读器喂错信号,SEO 和术语提取工具也会跳过它。
什么时候必须用 dfn?三个条件缺一不可
只有同时满足以下全部条件,才该包裹一个 dfn:
- 该词是整篇文档中第一次出现
- 紧随其后的文字(同一句子或紧邻段落)给出了它的明确定义,比如“是……”“指……”“表示……”,而非泛泛提及
- 这个词属于需澄清的专业概念,如
baseline、validator、URI,而不是通用词如button或click
常见错误:<p>详见 <dfn>HTTP</dfn> 协议。</p>——前面没定义,dfn 就成了无源之水。
dfn 里到底该放什么?术语值有严格提取优先级
浏览器和辅助技术不读你看到的文本,而是按固定顺序提取“被定义的是什么”:
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
- 若有
title属性,则以该值为准:<dfn title="HyperText Markup Language">HTML</dfn>→ 定义的是 "HyperText Markup Language" - 若内部只有一个子元素(如
<code></code>)且该子元素有title,则取子元素的title - 否则,才取
dfn自身的文本内容:<dfn>querySelectorAll()</dfn>
⚠️ 注意:<dfn title="HTTP"></dfn> 是无效写法——内部为空,屏幕阅读器读不出可见词,违反可访问性底线。
父容器必须是语义化块级元素,不能随便套
dfn 的定义上下文依赖祖先节点是否构成“可承载定义的环境”。规范明确要求最近的块级祖先应为 <p>、<section>、<dt> 或 <figcaption>:
- ❌ 错误:
<div><dfn>baseline</dfn> 是 CSS 中行内对齐的参考线。</div>——<div>无定义语义,dfn断连 - ❌ 错误:
<td><dfn>viewport</dfn></td>——表格单元格不是定义容器 - ✅ 正确:
<p><dfn>DOM</dfn> 是文档对象模型的缩写,表示 HTML 文档的编程接口。</p>
嵌套 dfn + abbr 的唯一合理场景
仅当首次定义缩写术语时才可嵌套,且必须满足:
-
abbr必须有title属性,内容是完整、人类可读的全称 -
dfn不应额外加title——否则会和abbr的title冲突 - 不能反过来嵌套:
<dfn><abbr title="Application Programming Interface">API</abbr></dfn>是有效结构;<abbr><dfn>API</dfn></abbr>则语义混乱
真正容易被忽略的一点:很多人以为加了 dfn 就算完成定义,结果把术语塞进标题、代码块或列表项里——这些地方无法承载定义语境,dfn 在那里只是个空壳,既不触发无障碍提示,也不被术语抽取工具识别。

















