area标签本身不渲染,需通过usemap与map的name严格匹配(含大小写、连字符)才能生效;coords须按shape类型提供无空格像素值,基于原图尺寸计算;href需有效url且alt不可为空;响应式场景需js重算坐标或改用svg。

area 标签本身不渲染、不响应点击,它只是为 <img> 提供坐标映射信息;真正实现热点交互的是 <map></map> + shape + coords 这套组合。写错一个字符或漏掉一个必需属性,整个热区就失效。
usemap 和 map name 必须严格匹配
这是 90% 的 area 失效原因。浏览器只认 usemap="#nav-map" 这种写法,usemap="nav-map" 或 usemap="#Nav-Map" 都会断连。
-
usemap值必须以#开头,且后面字符串要和<map name="xxx"></map>中的name完全一致(大小写、连字符、空格都算) - 推荐统一用小写字母 + 连字符命名,比如
name="product-section"→usemap="#product-section" - 为兼容 HTML5 和旧标准,可同时写
id和name:<map id="product-section" name="product-section"></map> - 检查方法:在 Chrome 中右键图片 → “检查”,看是否能高亮对应
<map></map>;不能高亮,说明没关联上
shape 和 coords 必须配对且格式干净
coords 是纯数字、逗号分隔、无空格、无换行的像素值序列,浏览器按顺序解析——多一个空格、少一个数字、坐标系弄反,都会导致区域消失或错位。
-
shape="rect"要求coords是 4 个整数:coords="50,30,180,120"(左上 x,y,右下 x,y) -
shape="circle"要求 3 个整数:coords="120,90,25"(圆心 x,y,半径) -
shape="poly"至少 6 个整数(即 3 个顶点):coords="10,20,40,30,35,80";自动闭合,不用重复首尾点 - 坐标永远基于原图尺寸计算,不是 CSS 渲染尺寸。一张 1200×800 的图缩成 600×400 显示,
coords="0,0,100,100"仍指原始左上角 100×100 像素区域 - 用开发者工具截图量坐标时,先禁用图片的
width/heightCSS,确保看到的是原始尺寸
href 和 alt 缺一不可,且 href 不支持纯 #id
href 必须是有效 URL,空字符串、#detail 这类纯锚点在多数浏览器中静默失效;alt 不是“可选提示”,而是无障碍刚需——没有它,屏幕阅读器直接跳过该热区。
-
href必须带协议或相对路径,例如:href="./page.html#detail"或href="javascript:void(0)" - 写
href="#"或href="#section"会导致控制台报Failed to load resource(浏览器当成绝对路径请求) -
alt必须有意义,不能是alt=""或alt="点击这里";应描述功能,如alt="德国区域,点击查看德国签证指南" - 如果要用 JS 处理点击,仍需保留
href="javascript:void(0)"+alt,再绑定click事件
移动端和响应式场景下 coords 会失效
原生 area 不支持百分比坐标,也不随图片缩放自适应。这不是 bug,是规范限制。一旦图片用 max-width: 100% 或 vw 响应式缩放,固定像素坐标必然偏移。
- iOS Safari 对小面积
poly热区响应迟钝,建议最小宽度/高度 ≥ 44px - 纯静态页且图片尺寸固定,直接写死
coords即可 - 响应式页面必须用 JS 动态重算坐标:监听
resize,按缩放比例重新设置area.coords - 更稳妥的替代方案是改用
<svg></svg>:<path></path>支持 viewBox 缩放、矢量路径、事件委托,且无障碍支持更好
最常被忽略的断点是:把 <map></map> 放在 <picture></picture> 或 <figure></figure> 里,或放在 Shadow DOM 中——usemap 关联会彻底失效,因为 <map></map> 必须与 <img> 在同一 DOM 上下文且可被浏览器直接查找到。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











