关键在于坐标精准、usemap与map name严格匹配:name值须小写数字短横线,无空格中文;coords基于原图像素;响应式需JS重算或改用SVG。

直接用 <map></map> + <area> 就能实现,但关键不是“加多少个”,而是坐标算得准不准、usemap 和 name 配得对不对——错一个字符,所有区域都点不动。
usemap="#xxx" 和 map name="xxx" 必须逐字匹配
这是最常失效的原因。浏览器对大小写、空格、#前缀极其敏感:
-
<img usemap="#floor-plan" alt="HTML怎么给图片添加多个映射区域" >中的#floor-plan必须和<map name="floor-plan"></map>的name值完全一致(注意:name里没有#) -
name值不能含空格、中文、特殊符号,只建议用小写字母、数字、短横线 - 如果页面有多个热区图,每个
usemap和对应map name都必须唯一,不能复用同一组名称 - 控制台报
Failed to load resource?大概率是href写成#room1这种无效值,应改为./plan.html#room1或用 JS 拦截
coords 坐标必须基于原始大图像素位置
拼接图本质仍是单张图片,所有 <area> 的 coords 都要从整张图左上角(0, 0)开始量,不是从子图左上角起算:
- 用 Figma / Photoshop / 在线坐标生成器打开拼接后的完整图片,量出每个子图左上角(x1, y1)和右下角(x2, y2)像素值
- 矩形热区填
shape="rect"+coords="x1,y1,x2,y2",比如第一块在 (0,0,200,150) - 不要用多个
<img alt="HTML怎么给图片添加多个映射区域" >+ CSS 定位模拟——那样无法保证语义化,也不支持原生跳转或alt可访问性 - 若拼接图是 Canvas 动态导出的,必须在导出时记录各区块原始坐标,再注入 HTML;运行时靠 JS 测量尺寸会因缩放、渲染时机出错
响应式下固定 coords 会失效,必须重算或换方案
原始像素坐标在缩放后必然错位,纯 HTML/CSS 无解:
立即学习“前端免费学习笔记(深入)”;
- 固定宽高的图片 + 媒体查询强制等比缩放,仍需 JS 监听
resize并按缩放比重算coords(如用rwd-image-maps库) - 更稳妥的做法是改用 SVG:把拼接图作为
<image></image>贴入 SVG,再用<rect></rect>/<circle></circle>等定义热区,天然支持响应式和语义化 - 测试时务必在真机小屏下点一遍——PC 上看着准,手机上可能偏移几十像素
真正卡住人的从来不是语法,而是坐标没对齐原始图、usemap 多了个空格、或者以为缩放后 coords 还能用。这些地方一错,整个热区就静默失效,连报错都没有。



















