必须嵌套dfn与abbr仅当术语既是缩写又首次定义时,结构须为缩写,dfn不可设title,且该缩写此前未出现过。

dfn 和 abbr 不是装饰性标签,它们各自承担不可替代的语义职责:前者标记“术语首次被定义”,后者暴露“缩写的完整形式”。混用、颠倒顺序或空 title 都会导致辅助技术读取失败、SEO 丢失关键术语关系。
什么时候必须嵌套 dfn 和 abbr
仅当一个词既是缩写、又是首次定义的术语时才需要嵌套,例如 “API”、“DOM”、“HTTP”。此时必须满足三个硬条件:
-
abbr必须在dfn内部,结构只能是<dfn><abbr title="Application Programming Interface">API</abbr></dfn>;反过来或并列都无效 -
dfn自身不能带title属性——否则会覆盖abbr的全称,屏幕阅读器只读外层内容 - 该缩写此前未在页面中出现过;若已在前文用
abbr提过全称,此处再套dfn就属于语义冗余
dfn 的 title 属性到底怎么用
dfn 的语义提取严格按优先级取值:先找自身 title,再找子元素(如 abbr)的 title,最后才取文本内容。这意味着:
-
<dfn title="Cascading Style Sheets">CSS</dfn>被定义的是 “Cascading Style Sheets”,不是 “CSS”——搜索引擎和读屏器不会 fallback 到标签内文字 -
<dfn title="">CSS</dfn>或<dfn title="CSS">CSS</dfn>都是语义失效:空title提取为空字符串,重复术语则无法建立定义关系 - 不设
title时,dfn内不能含其他标签(如strong),否则规则会跳转到子元素的title,容易意外丢失定义
为什么单独用 dfn 解释缩写是错的
dfn 的语义是“此处正在定义一个术语”,不是“此处展开一个缩写”。浏览器和辅助技术不会把 <dfn title="Document Object Model">DOM</dfn> 当作缩写处理:
- 没有
abbr,title在移动端几乎不可见(Safari 移动版默认不触发 tooltip) - 键盘用户无法通过焦点获取解释,读屏器也不会朗读全称
- SEO 工具无法识别这是缩写关系,只当作普通术语索引,丢失 “DOM ↔ Document Object Model” 这一关键映射
视觉 fallback 必须手动补救
语义正确只是起点,用户真正能“看到解释”的关键在 CSS 补救:
- 所有主流浏览器(尤其 Safari 移动端)默认不显示
abbr[title]的提示框,必须加abbr[title]:after { content: " (" attr(title) ")"; }才能让全称可见 -
dfn默认斜体在 Chrome/Firefox 生效,但 Safari 不渲染,若靠样式区分定义项,需统一重置或补充视觉标记(如浅灰底纹 + 小字号上标) - 别指望浏览器自动做这件事——可访问性不是写对标签就结束,而是确保解释在任何设备、任何交互方式下都可达
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











