dfn 标签仅在术语首次出现且紧邻完整定义句时有效,必须与定义语句同处一个 等语义化块级元素内,title 属性优先决定被定义项,不可跨段落、放标题或代码块中。

dfn 标签只在术语首次出现、且紧邻完整定义句时才有效;单独套词、跨段落、放标题或代码块里,等于没写。
dfn 必须和定义语句在同一 <p></p> 里
浏览器和屏幕阅读器不“推理”上下文,只认硬规则:dfn 和它的解释必须出现在同一个 <p></p> 元素内,中间不能插其他标签(比如 <em></em>、<span></span> 或换行)。
- ✅ 正确:
<p><dfn title="Document Object Model">DOM</dfn> 是网页内容的编程接口,以树状结构表示 HTML 文档。</p> - ❌ 错误:
<p><dfn>DOM</dfn></p><div class="aritcle_card flexRow artxards"> <div class="artcardd flexRow"> <a class="aritcle_card_img" rel="nofollow" href="/xiazai/shouce/1862" title="使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件"><img src="https://img.php.cn/upload/manual/000/000/010/170901721079108.gif" alt="使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a rel="nofollow" href="/xiazai/shouce/1862" title="使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件" class="overflowclass">使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件</a> <p class="overflowclass">如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Andr​​oid友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Andr​​oid应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更</p> </div> <a rel="nofollow" href="/xiazai/shouce/1862" title="使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div> <p>它是文档对象模型……</p>(跨段落,语义断裂) - ❌ 错误:
<h2><dfn>Accessibility</dfn></h2>(<h2></h2>不是定义容器) - ❌ 错误:
<pre class="brush:php;toolbar:false;"><code><dfn>fetch()</dfn></code></pre>(dfn不能嵌套在<pre class="brush:php;toolbar:false;"></pre>或<code>中)
title 属性决定“被定义的是什么”,不是可选装饰
dfn 的语义提取有固定顺序:先看 title 属性值,再看子元素(如 <abbr></abbr>)的 title,最后才取自身文本。任一命中即终止,不会 fallback。
- ✅ 正确:
<dfn title="Cascading Style Sheets">CSS</dfn>→ 被定义项是"Cascading Style Sheets" - ❌ 错误:
<dfn title="CSS">Cascading Style Sheets</dfn>→ 实际定义的是字符串"CSS",语义反转 - ❌ 错误:
<dfn title="">HTML</dfn>→ 提取结果为空字符串,辅助技术读不出有效术语 - ⚠️ 注意:
<dfn> fetch() </dfn>中前后空格会被计入文本,应写作<dfn>fetch()</dfn>
缩写与函数名的写法差异
缩略词必须靠 title 提供全称;函数名、语法符号等无需展开时,可省略 title,但内部文本必须非空且准确。
- 缩写场景:
<dfn title="World Health Organization">WHO</dfn>(title是语义核心) - 函数名场景:
<dfn>querySelectorAll()</dfn>(不加title,文本即术语) - 嵌套可行但顺序固定:
<dfn>语义化<abbr title="HyperText Markup Language">HTML</abbr></dfn>(abbr在内,dfn包裹整个术语) - ❌ 禁止:
<abbr><dfn>HTML</dfn></abbr>(逻辑错位,abbr不负责定义)
父容器必须是语义化块级元素
dfn 的定义上下文依赖其最近的块级祖先。只有 <p></p>、<section></section>、<dt></dt>、<figcaption></figcaption> 这类元素才被规范认可为合法定义环境。
- ✅ 正确:
<dl> <dt><dfn>HTTP</dfn></dt> <dd>超文本传输协议</dd> </dl> - ❌ 错误:
<div> <dfn>viewport</dfn> 是浏览器渲染区域……</div>(<div> 无定义语义) <li>❌ 错误:<code><td><dfn>baseline</dfn></td>(表格单元格不是定义容器) - 替代方案:若必须在布局容器中使用,可加
role="definition"显式声明语义
真正难的不是怎么写 dfn 标签,而是判断“这句话是不是真的在定义它”——很多所谓定义其实是举例、类比或上下文暗示,这时候硬套 dfn 反而污染语义。










