可行但需严格遵循规则:usemap与map name必须逐字节一致(含#、大小写、符号),coords基于原始像素尺寸,响应式下不加JS动态重算缩放比则必然点不准。

直接说结论:用 <map> + <area> 做硬件示意图热区是可行的,但必须基于原始图片像素尺寸写坐标,且响应式页面里不加 JS 动态缩放就必然点不准。
usemap 和 map name 必须逐字节匹配
浏览器对引用关系极其严格,错一个字符热区就完全失效,而且不报错、只静默忽略。
-
usemap值必须以#开头,比如usemap="#hardware-map" -
<map>的name属性值必须**完全一致**:大小写、连字符、空格都不能差,name="hardware-map"✅,name="Hardware-Map"❌ - HTML5 要求同时设
name和id(如<map name="hardware-map" id="hardware-map">),否则旧版 Safari 或 IE 兼容模式可能不识别 - 调试时别靠眼睛扫,用开发者工具复制
usemap值和<map name>值,粘贴比对是否一模一样
coords 坐标必须按 shape 类型填对格式
所有 coords 都是原始图片左上角为原点的像素值,X 向右、Y 向下递增——和 CSS 的 top/left 一致,但和数学坐标系相反。
-
shape="rect"→coords="x1,y1,x2,y2":左上角 + 右下角,且必须满足x1 < x2且y1 < y2 -
shape="circle"→coords="cx,cy,r":圆心坐标 + 半径,r必须是正整数(不能是0或小数) -
shape="poly"→coords="x1,y1,x2,y2,x3,y3,...":顶点成对出现,总数必须是偶数;首尾不自动闭合,建议手动重复第一个点更稳妥 - 千万别把设计稿里“居中坐标”或“百分比坐标”直接抄过来——HTML5 已废弃百分比,只认原始像素
响应式页面里 coords 一定会偏移
只要图片用了 max-width: 100%、width: 100% 或任何 CSS 缩放,coords 就立刻失准。这不是 bug,是原生机制限制。
立即学习“前端免费学习笔记(深入)”;
- 原始图是 1200×800,CSS 显示为 375px 宽,那
coords="0,0,100,100"实际只占屏幕约 31×21px,远低于触控推荐最小尺寸 44×44px - 必须监听
img.load和window.resize,动态重算每个<area>的coords - 计算逻辑:先读
img.naturalWidth/naturalHeight,再算缩放比scaleX = img.offsetWidth / naturalWidth,然后按shape类型分别缩放各坐标值 - 可直接用
rwdImageMaps这类成熟库,但别跳过这步——否则移动端几乎必错位
area 必须带 href 和 alt,否则语义与功能双崩
<area> 不是装饰性标签,它是语义化可点击区域,缺关键属性会直接导致行为异常或无障碍失败。
- 缺
href:点击无跳转,即使有 JS 监听也容易漏事件(因部分浏览器不触发 click) - 缺
alt:屏幕阅读器无法识别该区域用途,旧版 Safari 会直接忽略该<area> -
title虽非强制,但缺了就没有悬停提示,用户不知道点这里干啥 - 所有
<area>必须嵌套在<map>内,单独写在外面会被浏览器忽略
真正麻烦的不是写几行 HTML,而是坐标从哪来、怎么验证它在不同设备上真能点中、以及当产品改图重出一版时如何快速同步热区——这些才是实际项目里卡住进度的关键点。



















