必须紧邻完整定义句且置于语义块内,优先提取 title 属性作为术语值,仅用于首次明确定义,不可孤立或嵌套于无定义语义的容器中。

dfn 必须紧邻完整定义句,不能孤立出现
单独写 <dfn>DOM</dfn> 而不接解释,等于没定义——屏幕阅读器跳过,SEO 工具无法提取语义。它不是术语高亮开关,而是“定义锚点”,必须绑定一句自然语言的明确定义。
常见错误现象:<h2><dfn>Accessibility</dfn></h2> 后面才在段落里解释;或列表项中 <li><dfn>fetch()</dfn></li> 后无说明。
- 定义必须出现在同一
<p></p>块内,例如:<p><dfn title="Document Object Model">DOM</dfn> 是网页内容的编程接口,以树状结构表示 HTML 文档。</p> - 若定义需展开多段,
<dfn></dfn>仍须放在第一段的术语上,且后续段落逻辑不可中断 - 禁止塞进
<pre class="brush:php;toolbar:false;"></pre>、<code>或<td> 中——这些容器不具备定义语义 <h3>title 属性决定术语值,顺序不可跳过</h3> <p><code><dfn></dfn>的语义核心不是内部文本,而是按严格优先级提取的“被定义术语”:先看title属性值,再看子元素(如<abbr></abbr>)的title,最后才取自身文本。任一命中即终止,不会 fallback。典型误用:
<dfn title="DOM">Document Object Model</dfn>实际定义的是字符串 "DOM",语义反转;<dfn title="">HTML</dfn>提取出空字符串,违反可访问性底线。- 缩略词必须用全称作
title:<dfn title="World Health Organization">WHO</dfn> - 函数名、语法符号等无需展开时,可省略
title:<dfn>querySelectorAll()</dfn> - 避免
title与内部文本重复,如<dfn title="HTML">HTML</dfn>等于未提供新信息
父容器必须是语义化块级元素
<dfn></dfn>的定义上下文依赖其最近的块级祖先。规范只认可<p></p>、<section></section>、<dt></dt>、<figcaption></figcaption>这类具有定义承载能力的容器。套在<div> 或表格单元格里,等于切断语义链。 <p>错误示例:<code><div> <dfn>baseline</dfn> 是 CSS 中行内对齐的参考线。</div>——<div> 无定义语义,<code><dfn></dfn>断连。- 正确做法:改用
<p></p>包裹整句定义 - 若布局必须用
<div>,需显式加 <code>role="definition" - 术语集中管理时,推荐
<dl> <dt><dfn>term</dfn></dt> <dd>explanation</dd> </dl>,强化术语–定义关系
首次出现 ≠ 视觉上第一次看到
判断是否该用
<dfn></dfn>,不能靠肉眼扫描页面,而要从文档顶部逐段检查:该词此前是否已在任何位置以自然语言方式被解释或展开过?哪怕没套<dfn></dfn>,只要已定义,再次使用就属滥用。容易被忽略的复杂点:术语可能在前言、脚注、甚至引用块中提前出现并解释。一旦发生,正文中的“首次视觉出现”就不再是语义首次——此时加
<dfn></dfn>反而污染结构化数据,比不用更糟。实操建议:打开开发者工具,禁用所有样式后通读全文,确认哪一句真正承担了“首次明确定义”的功能;再反向定位该句中的术语,仅在此处包裹
<dfn></dfn>。 - 缩略词必须用全称作











