标签必须同时包含合法URL的href和描述性alt属性才能确保功能、无障碍及SEO有效;usemap与map的name须严格匹配(含#、大小写、符号);coords坐标基于原始图片尺寸,响应式需手动缩放计算。

<area> 标签的 href 必须是合法 URL,且需配合 alt 才能被识别为有效外部链接;漏掉 alt 会导致 Safari 忽略该区域,Chrome 虽能点击但无障碍和 SEO 全失效。
usemap 和 map 的 name 必须严格匹配(含 # 和大小写)
这是最常导致“点了没反应”的根本原因。浏览器不报错,但整个热区图直接静默失效。
-
<img usemap="#product-map" alt="HTML区域映射外部链接设置方法" >必须对应<map name="product-map"></map>——注意:usemap值带#,<map></map>的name不带 - 大小写敏感:
name="ProductMap"和usemap="#productmap"不匹配 - 空格、连字符、下划线都不能差——
name="nav-1"≠usemap="#nav_1" - 调试时右键图片 → 「检查」,看是否能高亮到对应的
<map></map>;如果找不到,先核对这个
area 的 href 必须是完整外部 URL(含协议)
内部链接可写 href="about.html",但外部链接必须带 https:// 或 http://,否则会被当成相对路径拼接到当前域名下。
- 正确:
href="https://example.com"、href="https://github.com/user/repo" - 错误:
href="example.com"(→ 当前页域名/example.com)、href="//example.com"(虽能工作但不推荐,HTTPS 页面里混 HTTP 资源会触发混合内容警告) - 不要用 JavaScript 伪协议:
href="javascript:void(0)"会破坏语义、禁用右键新标签打开、绕过浏览器预加载
area 必须同时包含 href 和 alt 才具备功能与兼容性
缺 href 点不了;缺 alt 在旧版 Safari 中整条 <area> 被忽略,屏幕阅读器读不出,搜索引擎也不索引。
立即学习“前端免费学习笔记(深入)”;
-
<area shape="rect" coords="0,0,100,50" href="https://twitter.com" alt="关注我们的 Twitter 账号">✅ -
<area shape="rect" coords="0,0,100,50" href="https://twitter.com">❌(无alt,Safari 下不可见不可点) -
<area shape="rect" coords="0,0,100,50" alt="Twitter">❌(无href,纯展示,无跳转) -
alt文本应描述功能而非单纯命名:“联系我们”比“Contact”更明确,“下载 PDF 手册”比“Manual”更准确
响应式下 coords 不自动缩放,必须手动重算
原始图是 1600×900,CSS 缩成 400×225,那 coords="0,0,200,150" 实际仍按 1600×900 解析——结果热区只覆盖左上角 1/16,几乎点不到。
- 记录原始尺寸:
const naturalW = img.naturalWidth; const naturalH = img.naturalHeight; - 计算缩放比:
const scaleX = img.offsetWidth / naturalW; const scaleY = img.offsetHeight / naturalH; - 矩形坐标要全部缩放:
coords="x1,y1,x2,y2"→Math.round(x1 * scaleX)等四个值 - 监听
img.addEventListener('load', updateCoords)和window.addEventListener('resize', updateCoords) - 别依赖 CSS 自适应——
<map></map>没有响应式能力,这是硬伤
真正容易被忽略的是 alt 属性的强制性:它不是“建议加”,而是 Safari 功能开关。另外,所有坐标都基于原始像素,哪怕你用 Figma 量的是缩放后尺寸,也得反向换算回去——这点在移动端适配时几乎必踩坑。



















