用和给图片加可点击区域需两步:先在中用usemap="#name"关联,再在内用定义rect/circle/poly热区,coords坐标基于图片左上角像素值,且usemap的#前缀和name值必须严格一致。

怎么用 <map></map> 和 <area> 给图片加可点击区域
直接上手:HTML 图片热区靠 <map></map> + <area> 实现,不是 CSS 或 JS 模拟,是原生语义化方案。关键在两步:给 <img> 绑定 usemap,再写对应 <map></map> 定义区域。
常见错误是 usemap 值漏掉开头的 #,比如写成 usemap="mymap" 而不是 usemap="#mymap" —— 这会导致整个热区失效,浏览器根本找不到 map。
-
<map></map>必须有name属性,且值要和usemap后面的#xxx严格一致(大小写敏感) -
<area>的href支持绝对 URL、相对路径、mailto:、tel:等,但不支持javascript:(现代浏览器会拦截) - 图片必须有明确宽高(最好用
width/height属性或 CSS 固定),否则coords坐标可能错位
coords 怎么填:rect / circle / poly 的坐标规则
<area> 的 shape 决定 coords 格式,不是像素随便写,顺序和单位都固定:
-
shape="rect":左上 x,y + 右下 x,y,如coords="10,20,100,80" -
shape="circle":圆心 x,y + 半径,如coords="150,60,30" -
shape="poly":按顺时针/逆时针列顶点 x,y 对,如coords="200,10,250,30,230,90,180,70"
注意:所有坐标都是相对于图片左上角(0,0)的整数像素值,不是百分比。如果图片被 CSS 缩放,coords 不会自动适配 —— 这是最常被忽略的兼容性坑。
响应式场景下热区失效怎么办
原生 <map></map> 不响应缩放,只要图片用 max-width: 100% 或 vw 单位等比例缩放,热区就必然偏移。没有纯 HTML/CSS 解法,必须加 JS 补偿:
- 监听
window.resize,按当前图片实际渲染宽高与原始宽高的比例,动态重算所有coords - 更稳妥的做法是改用 SVG 替代:
<svg></svg>内嵌<image></image>+<a><rect></rect></a>等,天然支持响应式和矢量缩放 - 若必须用
<map></map>,至少把图片原始尺寸写死在 HTML 中(如width="800" height="400"),再用 JS 读取它作为计算基准
为什么 Chrome 有时不触发热区跳转
除了 usemap 缺 #,还有几个硬性限制容易被忽略:
-
<area>必须有href或onclick,空href="#"不触发默认行为(需 JS 阻止默认并手动跳转) - 如果图片是通过
background-image设置的,<map></map>完全无效 —— 热区只作用于<img>元素本身 -
<map></map>标签必须在<img>同一页面内,不能跨文件引用;也不能放在外(如里)
调试时右键检查元素,确认 <img> 上有 usemap 属性,且控制台没报 “Failed to execute 'querySelector' on 'Document'” 类错误 —— 那基本就是 map 名字对不上。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











