usemap属性用于将<img>与<map>元素关联,使图像具备可点击热区;其值必须以#开头(如usemap="#map1"),且#后名称须与<map name="map1">完全一致(大小写、符号均敏感),否则热区静默失效。

usemap 属性的作用,是让 <img> 标签“认出”它该响应哪个 <map> 定义的热区集合。没有它,图片就是一张死图;加上它,浏览器才知道:哦,这张图上有些区域是可点的,得去查那个叫 #xxx 的映射表。
usemap="#name" 必须带 #,且 name 要和 <map name="name"> 逐字匹配
这是最常静默失败的一环——浏览器不报错,但热区完全没反应。
-
usemap的值必须以#开头,比如usemap="#product-map";写成usemap="product-map"(漏 #)就断连 -
<map name="product-map">的name值必须和#后面的部分**完全一致**:大小写、连字符、空格都不能差一个字节 - 一个
<img>只能有一个usemap,但多个<img>可共用同一个<map>(只要都指向#xxx)
usemap 只在 <img> 不是 <a> 或 <button> 后代时才合法
如果你把 <img> 套在 <a href="..."> 里,再给它加 usemap,HTML 解析器会直接忽略这个属性——不是 bug,是规范明文禁止。
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
- 常见误写:
<a href="#"><img src="x.jpg" usemap="#m"></a>→usemap失效 - 正确做法:去掉外层链接,让
<area>自己带href;或改用 JS 拦截点击 - 同理,
<button><img></button>内的img也不允许用usemap
coords 坐标基于原始图片尺寸,不是 CSS 渲染尺寸
usemap 本身不处理缩放,它只是个“指路人”。真正决定热区位置的是 <area coords>,而这些坐标永远按图片原始宽高(naturalWidth/naturalHeight)计算。
立即学习“前端免费学习笔记(深入)”;
- 如果图片用
max-width: 100%或width: 50%缩放过,热区必然错位 - 响应式页面中,必须用 JS 监听
resize和load,按比例重算所有coords值 - 别依赖开发者工具里看到的渲染尺寸取坐标;要用图像编辑软件读取原图像素值,或用 JS 读
img.naturalWidth动态换算
真正麻烦的不是写对 usemap,而是它一旦写错,浏览器就装作什么都没发生——既不报错,也不警告,只让你对着一张点不动的图反复刷新。所以每次改完,务必手动检查三处:usemap 值有没有 #、<map name> 是不是一字不差、图片是否被 CSS 悄悄拉伸了。


















