+最适合固定尺寸静态图的轻量交互,本质是像素级坐标绑定,仅适用于图片渲染尺寸等于原始尺寸、无缩放无响应式的场景;遇css缩放、响应式布局或动态尺寸必须换svg或地图sdk。

适合固定尺寸静态图的轻量交互场景
HTML <map></map> + <area> 本质是像素级坐标绑定,只适合图片尺寸完全固定、不缩放、不响应式的页面。比如后台管理系统的静态示意图、PDF导出前的原型图、内网知识库里的产品结构分解图——这些地方不需要适配手机,也不需要拖拽或高亮反馈,只要点得准、跳得稳就行。
一旦出现 width、max-width、transform: scale() 或任何让 <img> 实际渲染尺寸 ≠ 原始尺寸的情况,coords 就立刻失效。这不是 bug,是设计使然。
常见错误案例:电商 Banner 热区错位
很多团队在首页 Banner 上用 <map></map> 标记“立即抢购”“查看详情”两个区域,上线后发现移动端点不中。原因就一条:<img style="max-width:90%"> 导致图片被拉伸,但 <area coords="200,150,320,210"> 还是按原始 1920×1080 图的像素写的。
- 设计师给的坐标是缩放后截图取的 → 必须反算回原始尺寸:
coords × (naturalWidth / renderedWidth) - 没监听
img.load和window.resize→ 图片加载慢或横竖屏切换时热区没重算 -
<area>缺href或alt→ Safari 直接忽略该区域,屏幕阅读器无法播报
比 <map></map> 更靠谱的替代方案
真要响应式、可维护、支持悬停/高亮/拖拽?别硬扛 <map></map>。直接换:
- SVG:矢量图形天然缩放,
<path></path>或<polygon></polygon>可用百分比或 viewBox 自适应,还能加 CSS 动画和 JS 事件 - CSS +
<div> 绝对定位:把图片设为 <code>background-image,热区用带href的<a></a>或<button></button>覆盖,坐标用百分比(如top: 42.3%; left: 67.1%) - Leaflet / Mapbox:需要地理坐标、缩放、标记聚合?上地图 SDK,
<map></map>不是为此生的
最常被忽略的一点:就算你决定用 JS 动态重算 coords,也必须缓存原始坐标和原始宽高 —— img.naturalWidth 在异步加载完成前是 0,直接读会拿到错误缩放比。











