最简单方案是使用title属性,但存在移动端不触发、无法换行和自定义样式等缺陷;无障碍需结合alt、aria-label或aria-labelledby;高级交互应采用CSS伪元素或轻量JS实现,并注意焦点管理和XSS防护。
title 属性最简单,但效果有限绝大多数场景下,直接给 标签加 title 属性就能实现鼠标悬停显示提示框,比如:
@@##@@浏览器原生支持,无需 JS,兼容性好(IE6+ 都行)。但注意:移动端 Safari 和部分安卓浏览器默认不触发
title 提示;另外文字不能换行、无法自定义样式、不支持 HTML 内容。
aria-label 或 aria-labelledby 是无障碍刚需仅靠 title 不满足 WCAG 无障碍标准。屏幕阅读器可能忽略 title,尤其当 alt 已存在时。正确做法是:
alt,title 可选作补充alt="",并加 aria-hidden="true",此时若还需提示,改用 aria-label(值为纯文本)aria-labelledby 指向一个 ... 元素@@##@@
data-* 属性模拟 tooltip原生 title 无法控制颜色、箭头、延迟、位置。常见替代方案是用 data-tooltip 配合 CSS ::after 伪元素:
[data-tooltip] 选择器 + position: relative + ::after 生成提示框
hover 实现——移动端无 hover 状态,应配合 focus 和 touchstart 补充如果项目已用 jQuery UI 或 Bootstrap,可直接调 .tooltip() 方法,但要注意:
new bootstrap.Tooltip(...)
title 做 fallback,再用 mouseenter/mouseleave 控制自定义浮层显隐focus 和 blur,否则键盘用户无法访问提示innerHTML 直接渲染 data-tooltip 值——存在 XSS 风险,应使用 textContent
Tab 键应能进入提示框内部(如有按钮),关闭后焦点要回到原图片上。