usemap与map的name必须严格匹配(含https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15b、大小写、连字符),coords需按原始尺寸缩放计算,poly坐标须为偶数整数且顺序正确,area必须含href和alt属性。

usemap 和 map 的 name 必须严格匹配
热区不响应,八成卡在这一步:usemap 值漏了 https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15b,或大小写、连字符、空格和 <map name="..."></map> 不一致。浏览器不报错,只静默忽略整个映射逻辑。
-
usemap="https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15bproduct-map"✅ 必须带https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15b,且product-map要和<map name="product-map"></map>完全相同(包括连字符、大小写) -
usemap="product-map"❌ 没https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15b,直接失效 -
usemap="https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15bProduct-Map"❌ 大小写错一位,<map name="product-map"></map>就连不上
调试时别肉眼扫,用开发者工具复制 usemap 值,再复制 <map></map> 的 name,用文本比对工具逐字节确认。
coords 坐标必须按原始像素重算,不能抄缩放后数值
coords 只认图片原始尺寸(naturalWidth/naturalHeight),不认 CSS 渲染宽高。只要图片被 max-width: 100%、width: 50vw 或容器限制缩放过,硬编码的 coords="100,200,300,400" 就会点不准——不是 JS 没跑,是坐标系根本对不上。
- 必须等图片加载完成才能读
img.naturalWidth,否则为 0;推荐监听img.onload - 缩放比要分开算:
scaleX = img.offsetWidth / img.naturalWidth,scaleY = img.offsetHeight / img.naturalHeight - 矩形需缩放全部 4 个值,圆形缩放圆心 + 半径,多边形逐对处理 x/y(
i % 2 === 0 ? x : y)
示例关键逻辑:
立即学习“前端免费学习笔记(深入)”;
const updateCoords = () => {
if (!img.naturalWidth || !img.naturalHeight) return;
const scaleX = img.offsetWidth / img.naturalWidth;
const scaleY = img.offsetHeight / img.naturalHeight;
areas.forEach(area => {
const coords = area.coords.split(',').map(Number);
const scaled = coords.map((v, i) => Math.round(i % 2 === 0 ? v * scaleX : v * scaleY));
area.coords = scaled.join(',');
});
};shape="poly" 的 coords 字符串极易出错
多边形坐标不是“随便列几个数”,coords 是顶点序列,顺序错一位、少一对、混入小数或空格,整个区域就失效。浏览器不会提示,只会跳过该 <area>。
- 必须是偶数个整数,如
"60,40,120,30,110,90,60,80"(4 个点,8 个数字) - 首尾不自动闭合,但多数浏览器会补线;手动重复第一个点更稳:
"60,40,120,30,110,90,60,80,60,40" - 导出坐标时别用设计稿里的“百分比”或“居中坐标”,必须确认工具输出的是原始图尺寸下的像素值
临时加 border: 1px solid red 到 <img alt="HTML怎么调整映射区域的坐标" >,再用开发者工具截图选区比对,能快速验证是否对齐。
area 必须含 href 和 alt,否则语义与行为双崩
缺 href,点击无跳转;缺 alt,屏幕阅读器无法识别功能,旧版 Safari 甚至直接忽略该 <area>。这不是可选项,是 HTML5 强制要求。
-
href必须是有效 URL,即使是href="https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15b"也要写上,否则点击无响应 -
alt必须描述功能,如alt="点击进入华东地区详情",不是“华东区域”这种模糊描述 - 如果要用
target="_blank",务必配rel="noopener"防安全风险
响应式场景下,<map></map> + <area> 天生不可靠——它没自适应能力,缩放后坐标失准是必然结果。别指望纯 HTML 解决,要么用 JS 动态重算,要么直接换 SVG。



















