dfn 标签仅在术语首次出现且紧邻明确定义语句时有效,必须嵌套于语义化块级元素中,优先通过 title 属性指定定义内容,嵌套 abbr 仅限首次定义缩写。

dfn 标签不是“加斜体”或“高亮术语”的视觉开关,它只在术语**首次出现且紧邻明确定义语句**时才有效;用错等于向屏幕阅读器和搜索引擎发送错误信号。
dfn 必须紧邻定义语句,不能单独存在
浏览器和辅助技术只识别“dfn + 紧随其后的自然语言解释”这一组合。单独写 <dfn>fetch()</dfn> 而不接说明,语义即失效。
- ✅ 正确:
<p><dfn>DOM</dfn> 是文档对象模型的缩写,表示 HTML 文档的编程接口。</p> - ❌ 错误:
<ul><li><dfn>viewport</dfn></li></ul>(后面没解释) - ❌ 错误:
<h2><dfn>Accessibility</dfn></h2>(定义在下一段才出现)
title 属性决定“被定义的是什么”,顺序不能反
dfn 提取定义内容有严格优先级:先看 title 属性值,再看子元素的 title,最后才取自身文本。这个顺序直接影响语义是否准确。
- ✅ 缩写场景:
<dfn title="Document Object Model">DOM</dfn>→ 定义的是 “Document Object Model” - ❌ 反向写法:
<dfn title="DOM">Document Object Model</dfn>→ 实际定义的是字符串 "DOM",语义反转 - ⚠️ 注意:
<dfn title="HTTP"></dfn>内部为空 → 辅助技术读不出可见词,违反可访问性底线
父容器必须是语义化块级元素
dfn 的定义上下文依赖最近的块级祖先是否构成“可承载定义的环境”。规范明确要求该祖先必须是 <p>、<section>、<dt> 或 <figcaption>。
立即学习“前端免费学习笔记(深入)”;
- ❌ 错误:
<div><dfn>baseline</dfn> 是 CSS 中行内对齐的参考线。</div>——<div>无定义语义 - ❌ 错误:
<td><dfn>viewport</dfn></td>—— 表格单元格不是定义容器 - ✅ 正确:
<p><dfn>URI</dfn> 是统一资源标识符,用于标识某一互联网资源。</p>
嵌套 dfn + abbr 仅限首次定义缩写术语
只有当某个缩写词在文档中第一次出现,且你要同时完成「标记它是缩写」+「声明这是它的定义位置」两件事时,嵌套才成立。
- ✅ 合理嵌套:
<p>HTML,即 <abbr title="HyperText Markup Language"><dfn>HTML</dfn></abbr>,是网页的标准标记语言。</p> - ❌ 错误:
<dfn title="Application Programming Interface">API</dfn>——API是缩写,应由abbr承担展开职责 - ⚠️ 关键限制:嵌套时
abbr必须带title,而dfn不应设title,否则冲突
最容易被忽略的一点:你写的 dfn 是否真正在文档中「首次出现」?如果同一术语已在前文某处定义过(哪怕没套 dfn),这次再用就属于语义污染——比不用更糟。



















