<map>标签本身不渲染内容,必须通过<img>的usemap属性与<map name="xxx">精确匹配(大小写敏感、#可选)才能生效;<area>的shape和coords须严格对应:rect为4值(左上+右下)、circle为3值(圆心+半径)、poly为偶数个顶点坐标,且所有坐标均基于图片原始尺寸,缩放后需按比例重算。
<map> 本身不渲染任何内容,必须配合 <img> 的 usemap 属性才能生效;单独写 <map> 标签不会产生热点,也不会报错,容易误以为“写了就有效”。
<map> 和图片真正关联起来关键在两处匹配:一是 <img> 的 usemap 属性值(带或不带 #),二是 <map> 的 name 属性值。两者必须完全一致(大小写敏感)。
usemap 写成 usemap="#mymap" → <map name="mymap">
usemap 写成 usemap="mymap" → <map name="mymap">(同样有效,HTML5 允许省略 #)<map> 外部的空格、换行,但 name 值里不能有空格或特殊字符<map> 区域将完全不可点击,且无任何提示<area> 的 shape 和 coords 怎么填才不偏移coords 是像素坐标,原点在图片左上角(0,0)。不同 shape 对应的参数数量和含义完全不同,填错就会热点错位甚至消失。
shape="rect":需 4 个值,coords="x1,y1,x2,y2"(左上角 + 右下角)shape="circle":需 3 个值,coords="cx,cy,r"(圆心 x、y + 半径)shape="poly":需偶数个值,每对为一个顶点,coords="x1,y1,x2,y2,x3,y3,..."
width/height 或 CSS 缩放图片,coords 必须按比例重算不是代码语法错,而是隐性约束没满足。最常被忽略的是以下几点:
立即学习“前端免费学习笔记(深入)”;
<img> 没加 alt 属性:部分浏览器(尤其是旧版 IE)要求必须有 alt 才启用热点<area> 缺少 href 或 onclick:空 <area> 不可交互,即使 shape 和 coords 正确<map> 放在 <body> 外(如误放在 <head>):虽然 HTML5 不报错,但浏览器不解析其中的 <area>
target="_blank" 但没加 rel="noopener":现代浏览器可能静默拦截新窗口,看起来像“点了没反应”坐标的计算依赖图片原始分辨率,缩放后未重算 coords 是线上最普遍的失效原因;另外,<map> 不支持响应式自动适配,移动端需额外 JS 计算或改用 SVG 热点方案。