dfn的title属性定义术语本体,必须非空、准确、人类可读且不含首尾空格或换行;它优先于标签内文本被提取,须紧邻完整定义语句并置于语义块级元素中。

title属性决定“被定义的是什么”,不是可选提示
dfn的title属性不是tooltip,它是语义核心——浏览器、屏幕阅读器、搜索引擎提取术语时,**第一优先级就看它**。只要title存在(哪怕为空),就不会回退到标签内文本。比如<dfn title="Cascading Style Sheets">CSS</dfn>定义的就是“Cascading Style Sheets”,不是“CSS”;而<dfn title="">CSS</dfn>定义的是空字符串,语义直接失效。
- 缩略词必须用全称作
title:<dfn title="World Health Organization">WHO</dfn> - 函数名、语法符号等无需展开时,可不写
title:<dfn>fetch()</dfn> - 避免
title与内部文本重复:<dfn title="HTML">HTML</dfn>等于没提供新信息 -
title值必须非空、准确、人类可读,不能是“见下文”“详见2.1”这类导航提示
为什么title值不能含空格或换行?
虽然title本身是属性,但它的值会被原样提取为术语内容。如果写成title=" Document Object Model "(首尾带空格),提取结果就是带空格的字符串,可能影响术语匹配、索引或ARIA解析。同理,换行符会被保留,导致结构化数据出错。
- 写
title="Document Object Model",不加多余空白 - 中英文混排时,
title能明确绑定含义,防止读屏软件误读为两个独立词 - 不要用
title塞技术细节(如版本号、参数列表),它只负责术语本体,不是文档摘要
嵌套abbr时title怎么处理?
当术语本身含缩写(如“语义化 HTML”),可以合法嵌套<dfn><abbr title="HyperText Markup Language">HTML</abbr></dfn>。此时dfn的术语值取自abbr的title,即“HyperText Markup Language”。但注意顺序不可颠倒:<dfn><abbr>HTML</abbr></dfn>无效,因为abbr必须自带title才参与提取。
- 嵌套只允许一层,且子元素必须是单个带
title的abbr或span - 不要在
dfn里再套dfn:<dfn><dfn>term</dfn></dfn>外层title被忽略 - 若同时需要术语定义和缩写解释,优先用
dfn配title,abbr留作后续复述使用
常见失效场景:写了title却没定义成功
最隐蔽的问题是:title写了,但dfn没出现在定义句中。例如<p><dfn title="Application Programming Interface">API</dfn> 是</p>——后半句“是”后面没接任何解释,语义链断裂。辅助技术会读出“Application Programming Interface”,但不知道它被定义为什么。
立即学习“前端免费学习笔记(深入)”;
-
dfn必须紧邻完整定义语句,推荐放在句首,后接冒号/逗号+自然语言解释 - 父容器必须是语义块级元素,如
<p>、<dt>、<section>;不能在<h2>、<pre>、<code>或<div>里孤立使用 - 定义句中不能把解释塞进其他标签打断流,比如
<dfn>DOM</dfn><strong>是…</strong>中间插入<strong>可能导致部分读屏器跳过解释
title写得多详细,而在于它是否和一句自洽、连贯、可见的定义语句绑在一起。否则,再标准的title也只是悬空的语义碎片。



















