dfn标签仅在术语首次出现且紧邻明确定义语句时使用;必须包裹术语本身,优先提取title属性值,父容器须为等语义化块级元素,否则导致语义断裂与无障碍失效。

dfn 标签不是加斜体的快捷键,也不是强调词——它只在术语**首次出现且紧邻明确定义语句**时才该用;用错等于给屏幕阅读器喂错信号,SEO 和术语提取工具也会跳过它。
什么时候必须用 dfn?三个条件缺一不可
只有同时满足以下全部条件,才该包裹一个 dfn:
- 该词是整篇文档中第一次出现
- 紧随其后的文字(同一句子或紧邻段落)给出了它的明确定义,比如“是……”“指……”“表示……”,而非泛泛提及
- 这个词属于需澄清的专业概念,如
baseline、validator、URI,而不是通用词如button或click
常见错误: 详见 HTTP 协议。——前面没定义,dfn 就成了无源之水。
dfn 里到底该放什么?术语提取有严格优先级
浏览器和辅助技术不读你看到的文本,而是按固定顺序提取“被定义的是什么”:
- 若有
title属性,则以该值为准:HTML→ 定义的是"HyperText Markup Language" - 若内部只有一个子元素(如
)且该子元素有title,则取子元素的title - 否则,才取
dfn自身的文本内容:querySelectorAll()
⚠️ 注意: 是无效写法——内部为空,屏幕阅读器读不出可见词,违反可访问性底线。
父容器必须是语义化块级元素,不能随便套在 或 里dfn 的定义上下文依赖祖先节点是否构成“可承载定义的环境”。规范明确要求最近的块级祖先应为 、、 或 :
- ❌ 错误:
baseline 是 CSS 中行内对齐的参考线。 —— 无定义语义,dfn 断连
- ❌ 错误:
viewport —— 表格单元格不是定义容器
- ✅ 正确:
DOM 是文档对象模型的缩写,表示 HTML 文档的编程接口。
最容易被忽略的一点:你写的 dfn 是否真正在文档中「首次出现」?如果同一术语已在前文某处定义过(哪怕没套 dfn),这次再用就属于滥用——语义污染比不用更糟。
里dfn 的定义上下文依赖祖先节点是否构成“可承载定义的环境”。规范明确要求最近的块级祖先应为 、、 或 :
- ❌ 错误:
baseline 是 CSS 中行内对齐的参考线。 —— 无定义语义,dfn 断连
- ❌ 错误:
viewport —— 表格单元格不是定义容器
- ✅ 正确:
DOM 是文档对象模型的缩写,表示 HTML 文档的编程接口。
最容易被忽略的一点:你写的 dfn 是否真正在文档中「首次出现」?如果同一术语已在前文某处定义过(哪怕没套 dfn),这次再用就属于滥用——语义污染比不用更糟。










