dfn的术语值优先取title属性值,其次子元素title,最后dfn自身文本;任一命中即终止,不回退。

dfn的术语值到底取哪个?title优先级不可绕过
浏览器和屏幕阅读器提取dfn所定义的术语时,严格按三步顺序执行:先看title属性值,再看子元素(如abbr)的title,最后才读dfn自身文本内容。任一命中即终止,不会 fallback。
这意味着:<dfn title="Cascading Style Sheets">CSS</dfn> 定义的是 “Cascading Style Sheets”,不是 “CSS”;而 <dfn title="">CSS</dfn>(空title)定义的就是空字符串,不是回退到 “CSS”。
常见错误包括:
- 写成
<dfn title="DOM">Document Object Model</dfn>,实际定义的是字符串 "DOM",语义反转 - 用
<dfn title="see section 2.1">API</dfn>,把title当跳转提示,而非术语释义 - 忽略空格影响,如
<dfn> fetch() </dfn>中前后空格会被计入文本内容,导致提取出 " fetch() "
title属性不是tooltip,是语义锚点
title在dfn中不是可选装饰,它直接参与结构化数据生成、ARIA解析和搜索引擎术语抽取。不写title,缩略词就无法表达全称;写了却含糊其辞,反而污染语义。
立即学习“前端免费学习笔记(深入)”;
实操建议:
- 缩略词必须用全称作
title:<dfn title="World Health Organization">WHO</dfn> - 函数名、语法符号等无需展开时,可省略
title:<dfn>querySelectorAll()</dfn> - 避免
title与内部文本重复,如<dfn title="HTML">HTML</dfn>等于没提供新信息 - 中英文混排场景下,
title能明确绑定术语含义,防止辅助技术误读
dfn必须紧邻定义语句,不能孤悬或嵌套错位
dfn不是视觉强调工具,也不是占位符。它只在“术语首次出现 + 紧接完整解释”的上下文中生效。单独写 <dfn>fetch()</dfn> 而无后续说明,等于没定义。
典型失效场景:
- 放在
<h2></h2>里:<h2><dfn>Accessibility</dfn></h2>,定义语句却在下一段 - 塞进
<pre class="brush:php;toolbar:false;"></pre>或<code>块中,违反内联元素嵌套规则 - 父容器是
<div>或<code><td>,缺乏语义定义环境(需<code><p></p>、<section></section>、<dt></dt>等) - 嵌套使用:
<dfn><dfn>term</dfn></dfn>,外层dfn的title被忽略 - 内部文本必须非空且可读,哪怕只是缩写或代号(如
CSS、WAI) - 避免用
dfn包裹整段解释,它只包术语本身;解释必须在外部自然句式中给出 - 不要和
abbr混用:<abbr></abbr>用于缩写,<dfn></dfn>用于首次定义——二者语义不同,不可互换 - 若定义跨多段,
dfn必须放在第一处术语上,后续段落需逻辑连续、不可中断
正确做法是让dfn出现在定义句开头,并确保解释自然连贯,例如:<p><dfn title="Document Object Model">DOM</dfn> 是网页内容的编程接口,以树状结构表示 HTML 文档。</p>
兼容性与可访问性落地要点
所有现代浏览器都按标准解析dfn的title优先级,但部分旧版屏幕阅读器可能忽略title,只读内部文本。因此不能只依赖title,还要兼顾可见性。
关键平衡点:
最易被忽略的一点:术语是否“首次出现”不是靠人工数次数,而是由文档结构决定的——同一页面中,只要此前未在定义性上下文(如<p></p>、<dd></dd>)中出现并解释过,才算首次。


















