usemap属性必须以#开头且与map元素name值严格一致,img不可嵌套在a或button内,coords基于原始图片尺寸,alt属性不可省略。

usemap 属性值必须带 # 且严格匹配
浏览器只认 usemap="#xxx 这种写法,漏掉 # 就彻底断连——比如写成 usemap="xxx" 或 usemap="map1",页面完全没反应,也不报错。
<map name="xxx"></map> 的 name 值必须和 usemap 中 # 后面的部分逐字一致:大小写、连字符、下划线、空格都不能差。常见错误是复制粘贴时多一个空格,或把 product-map 写成 product_map。
虽然规范允许 <map id="xxx"></map> 也被引用,但实际兼容性不稳,建议只用 name,并确保它和 usemap 严格对应。
img 不能嵌套在 a 或 button 里
如果 <img> 被包在 <a href="https://www.php.cn/link/263b1243ca2dbeb358777ceabc4a2e4c"></a> 或 <button></button> 里,usemap 属性会被浏览器直接忽略——这是 HTML 规范明文规定的,不是 bug。
解决办法只有两个:
• 把 <img> 拿出来,让它成为独立元素,靠 <area href="https://www.php.cn/link/263b1243ca2dbeb358777ceabc4a2e4c"> 控制跳转;
• 改用 JavaScript 拦截点击事件,自己算坐标分发逻辑。
别试图用 CSS 把 <a></a> 做成块级覆盖整个图来“模拟”,那样会破坏热区的语义和可访问性。
coords 坐标永远基于原始图片尺寸
<area shape="rect" coords="10,20,100,80"> 这些数字不是按你看到的渲染宽高算的,而是按图片文件本身的像素尺寸(即 img.naturalWidth / img.naturalHeight)。
一旦用了 width、max-width、transform: scale() 等缩放手段,热区就必然错位。
响应式页面里必须用 JS 监听 load 和 resize,动态重算所有 coords 值。别依赖开发者工具里截图量出来的渲染尺寸——那只是表象。
alt 属性不是可选的,尤其当有 href 时
每个 <area> 只要带 href,就必须提供 alt。否则不仅 WCAG 不合规,屏幕阅读器也无法告知用户该区域的功能。
alt 内容要具体:比如 alt="查看产品详情" 比 alt="链接" 有用得多;alt="" 仅适用于纯装饰性热区(且需确认该区域无交互意义)。
没有 href 的 <area>(比如仅用于 JS 事件绑定),alt 仍建议保留,描述其作用,否则键盘导航时会丢失上下文。
真正麻烦的不是语法写错,而是它静默失效:浏览器既不警告,也不提示,只让你对着一张点不动的图反复检查 HTML 源码。每次改完,务必手动核对三处:usemap 是否带 #、<map name></map> 是否一字不差、图片是否被 CSS 悄悄拉伸了。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











