usemap="#xxx" 必须与 map 的 name 属性逐字匹配(含大小写、符号),且 name 不带#;map 与 img 需同文档或同域;coords 基于图片原始尺寸;area 的 href 和 alt 均不可省略。

usemap="#xxx" 和
浏览器只认 usemap 值中 # 后面的部分,和 <map></map> 的 name 属性值完全一致——大小写、连字符、下划线、空格,一个都不能错。比如 usemap="#Floor-1" 对应的必须是 <map name="Floor-1"></map>,写成 <map name="floor-1"></map> 或 <map name="Floor_1"></map> 都会静默失效。
常见错误现象:热区点不动、控制台无报错、开发者工具里 <area> 元素存在但没响应。根本原因就是这组字符串不一致。
-
usemap一定要带#(HTML4/5 均要求),usemap="mymap"是无效的 -
<map></map>的name绝对不能带# - 不要用空格或中文作
name值,如name="一楼平面图"会出问题
map 和 img 必须同文档或同域 iframe
<map></map> 不能跨文档引用。把 <map></map> 放在外部 HTML 文件里,再用 <iframe></iframe> 加载;或者用 JS fetch 一段含 <map></map> 的 HTML 插入页面,但没等 <img> 渲染完成就执行,都会导致关联失败。
使用场景:单页应用动态插入图片时,务必确认 <map></map> 已挂载到 document.body(或至少是 <img> 的祖先容器)且 name 拼写正确。
- 静态页面中,
<map></map>放在<img>前后都行,顺序无关 - 若用 JS 动态创建
<map></map>,记得调用document.body.appendChild(mapEl),不能只生成 DOM 却不插入文档流 - iframe 内的
<img>只能关联同域 iframe 内的<map></map>,跨域 iframe 中的<map></map>不会被识别
coords 坐标必须严格匹配图片原始尺寸
<area> 的 coords 是基于图片**原始像素尺寸**计算的,不是 CSS 缩放后的显示尺寸。如果图片被 width/height 或 CSS 缩放过,热区就会偏移甚至失效。
例如一张 800×600 的图,用 style="width: 400px; height: 300px;" 显示,那么 shape="rect" coords="100,100,200,200" 实际点击区域仍是原图上 (100,100)–(200,200) 这块,缩放后它只占显示区域的左上四分之一,极易误判。
- 调试建议:临时去掉所有 CSS 尺寸控制,用原图尺寸验证
coords是否准确 -
shape="rect"要 4 个值:x1,y1,x2,y2(左上→右下) -
shape="circle"要 3 个值:cx,cy,r(圆心+半径) -
shape="poly"要偶数个值,按x1,y1,x2,y2,...成对出现
area 的 href 和 alt 不可省略(尤其当有跳转需求时)
<area> 不是装饰性元素,它是功能性的可点击区域。如果写了 href,就必须提供 alt——这是可访问性要求,也是部分浏览器激活热区的前提。
错误写法:<area shape="rect" coords="0,0,100,100" href="https://www.php.cn/link/c1897e065d566c174be348891f3c2887">(缺 alt);正确写法:<area shape="rect" coords="0,0,100,100" href="https://www.php.cn/link/c1897e065d566c174be348891f3c2887" alt="入口大厅">。
-
alt值应描述该区域用途,而非图片内容本身 - 没有跳转需求时,可用
href="#"+onclick,但仍需alt - 避免用空字符串
alt="",除非该区域纯装饰且aria-hidden="true"明确声明
usemap 和 name 之间差了一个大小写字母,或者图片加载失败后没人意识到热区天然失效。前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











