必须配合和才能实现图片区域映射,核心是的usemap="#name"与严格匹配(大小写敏感、#前缀不可少),通过shape和基于左上角原点的像素coords定义矩形、圆形或多边形热区,坐标需图像工具精确测量,响应式下须js重算或改用svg。

直接用 <img> 标签本身无法定义可点击区域,必须配合 <map></map> 和 <area> 才能实现图片区域映射——这是客户端图像映射的唯一标准方案,不依赖 JavaScript,但坐标固定、无响应式能力。
怎么让图片和热区关联起来
核心是 usemap 属性和 <map></map> 的 name 匹配,且必须带 # 前缀:
-
<img src="plan.jpg" alt="楼层图" usemap="#floor-map">——usemap值为#floor-map -
<map name="floor-map"></map>——name值必须是floor-map(去掉#) - 两者名称大小写必须完全一致,浏览器区分大小写
- 如果页面有多个映射,每个
name和usemap都要唯一,不能重复
<area> 的 shape 和 coords 怎么填
shape 决定区域形状,coords 是基于图片左上角 (0,0) 的像素坐标,需用图像编辑工具量取:
使用 PptxGenJS 和 Python 解析,将结构化的 HTML/CSS 幻灯片内容转换为原生、可编辑的 PowerPoint(.pptx)演示文稿。
-
shape="rect":四个值,coords="x1,y1,x2,y2"(左上角 + 右下角) -
shape="circle":三个值,coords="cx,cy,r"(圆心 x、y + 半径) -
shape="poly":偶数个值,coords="x1,y1,x2,y2,x3,y3,..."(顺时针或逆时针顶点序列) - 所有坐标单位都是像素,不是百分比,也不是 CSS 逻辑像素
- 用浏览器开发者工具选中
<area>,勾选“Show area”可实时预览热区位置(Chrome/Edge 支持)
为什么点了没反应?常见失效原因
图像映射看似简单,但几个关键点一错就完全不可用:
-
<img>缺少alt属性不会报错,但部分屏幕阅读器和旧浏览器可能忽略整个映射 - 图片加载失败时,
<map></map>仍存在,但热区坐标失去参照,点击无效 -
<area>没写href或写成空字符串href="",点击后会刷新当前页(相当于跳转到自身) - 多个
<area>区域重叠时,DOM 顺序靠后的会覆盖前面的(z-index 无效),导致前一个点不中 - 服务器返回的图片 MIME 类型错误(如把
image/jpeg声明成text/plain),某些浏览器拒绝渲染映射
响应式页面里还能用吗
原生 <map></map> 的坐标是绝对像素值,图片缩放后热区就错位——这不是 bug,是设计如此:
- 若图片用
width: 100%或max-width响应式缩放,必须用 JS 动态重算coords,例如通过rwd-image-maps库 - 更稳妥的替代方案是改用
<svg></svg>:矢量路径天然适配缩放,<path></path>+<a></a>组合语义清晰、支持 CSS 动画和伪类 - 复杂交互(如悬停高亮、拖拽热区)基本绕不开 JS,此时直接用 canvas 或 SVG 更可控
- 别指望
object-fit或background-image配合<map></map>——usemap只对<img>生效,且只认原始尺寸
真正难的不是写对那几行 HTML,而是坐标采集的精度、多设备缩放下的映射一致性,以及当图片尺寸由 CSS 控制时如何与 JS 协同更新热区——这些细节漏掉一个,用户就点不到该点的地方。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










