usemap不生效的首要原因是#号缺失或name不匹配;必须usemap="#xxx"且严格一致(大小写、符号全相同),图片加载成功,area还需含href和alt。

usemap 属性不生效?先检查 # 号和 name 是否完全匹配
绝大多数“点了没反应”的问题,根源就在 usemap 值漏了 #,或者和 <map></map> 的 name 对不上。浏览器只认 usemap="#myMap" 这种写法,写成 usemap="myMap" 或 usemap="#mymap"(大小写不一致)都会静默失败。
必须同时满足三个条件:
-
<img alt="HTML网页图片区域映射怎么搞?零基础实操教程" >标签有usemap="#xxx" -
<map></map>标签有name="xxx"(注意:不是id,虽然加id="xxx"也没坏处) - 图片已成功加载(控制台无 404,
alt能正常显示)
临时验证方法:给 <img alt="HTML网页图片区域映射怎么搞?零基础实操教程" > 加个 border: 1px solid red,再用开发者工具「元素选择器」点一下,确认 <map></map> 确实被关联上了——如果没关联,鼠标悬停不会变手型。
coords 坐标填不准?所有值都必须是原始图的像素坐标
你用 PS 或 image-map.net 取的坐标,如果导出时没选「原始尺寸」,而是按缩放后截图取的,那 coords 一定偏移。因为 <area> 的 coords 永远以图片原始宽高(img.naturalWidth / img.naturalHeight)为基准,和 CSS 怎么缩放它完全无关。
立即学习“前端免费学习笔记(深入)”;
常见 shape 写法示例:
- 矩形:
shape="rect" coords="20,15,120,85"(左上 x,y + 右下 x,y) - 圆形:
shape="circle" coords="80,50,30"(圆心 x,y + 半径) - 多边形:
shape="poly" coords="40,20,110,10,105,70,40,65"(x,y 成对出现,顺时针或逆时针都行)
别抄设计稿里的百分比坐标——HTML5 已废弃 % 单位,只接受整数像素值。
实现 Markdown↔ HTML 互转,支持导出 PDF,用于用户请求的文档格式转换。
响应式页面里点击错位?原生
只要图片用了 width: 100%、max-width: 100% 或任何 CSS 缩放,硬编码的 coords 就会失效。这不是 bug,是规范限制:坐标系固定在原始像素空间,浏览器不会帮你重算。
可行解只有两个:
- 用 JS 动态重映射:监听
img.addEventListener('load', updateCoords)和window.addEventListener('resize', updateCoords),根据img.offsetWidth / img.naturalWidth算出缩放比,再遍历所有<area>重新设置coords - 直接换 SVG:
<svg><image href="https://www.php.cn/link/263b1243ca2dbeb358777ceabc4a2e4c"></image><polygon points="https://www.php.cn/link/263b1243ca2dbeb358777ceabc4a2e4c"></polygon></svg>,矢量坐标天然适配缩放,还能绑定事件、加 hover 效果
别试图用 position: absolute + div 叠盖模拟热区——语义丢失、无障碍崩、移动端 touch 区域难对齐,维护成本反而更高。
area 标签报错或被忽略?alt 和 href 缺一不可
很多同学只写 href,漏掉 alt,结果在旧版 Safari 或屏幕阅读器里整个 <area> 直接被跳过。HTML 规范明确要求:每个 <area> 必须含 alt,否则语义断裂、可访问性失败。
必须写的属性组合:
-
shape(rect/circle/poly) -
coords(像素值,不能空) -
href(没有 href,点击无跳转行为) -
alt(没有 alt,屏幕阅读器无法读出用途,Safari 可能直接忽略该区域)
额外建议加 title,否则用户悬停时看不到提示文字;target="_blank" 必须配 rel="noopener",否则存在安全风险。
真正卡住人的从来不是怎么写第一行 <map></map>,而是缩放后坐标失准、移动端点不中、无障碍校验通不过这些细节。原生方案简洁,但约束极硬——坐标不动、引用符号不能省、alt 不可省略,少一个就掉链子。


















