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

usemap 属性的作用,是让 <img> 标签“认出”它该响应哪个 <map></map> 定义的热区集合。没有它,图片就是一张死图;加上它,浏览器才知道:哦,这张图上有些区域是可点的,得去查那个叫 #xxx 的映射表。
usemap="#name" 必须带 #,且 name 要和
这是最常静默失败的一环——浏览器不报错,但热区完全没反应。
-
usemap的值必须以#开头,比如usemap="#product-map";写成usemap="product-map"(漏 #)就断连 -
<map name="product-map"></map>的name值必须和#后面的部分**完全一致**:大小写、连字符、空格都不能差一个字节 - 一个
<img>只能有一个usemap,但多个<img>可共用同一个<map></map>(只要都指向#xxx)
usemap 只在
不是 或
如果你把 <img> 套在 <a href="..."></a> 里,再给它加 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></map> 是不是一字不差、图片是否被 CSS 悄悄拉伸了。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










