area标签必须嵌套在map内且为直接子元素才生效,单独使用被浏览器忽略;需usemap="#name"与严格匹配,coords基于原图像素,不随CSS缩放自适应,href和alt为必填项。

area 标签必须嵌套在 map 内部才能生效
单独写 <area> 不会触发任何点击行为,浏览器直接忽略。它依赖 <map></map> 的 name 属性与 <img alt="HTML怎么用区域映射标签划分可点击区域" > 的 usemap 属性配对绑定。
常见错误是把 <area> 放在 <div> 或页面任意位置,结果区域完全不可点。正确结构必须是:<pre class="brush:php;toolbar:false;"><img src="plan.png" usemap="#floor-plan" alt="HTML怎么用区域映射标签划分可点击区域" >
<map name="floor-plan">
<area shape="rect" coords="10,20,110,120" href="/room/a">
<area shape="circle" coords="200,80,30" href="/room/b">
</map></pre><p><code>usemap 值要带 # 前缀,name 值不带——这是最容易写反的点。
coords 坐标系以图片左上角为原点,单位是像素
所有 coords 数值都相对于图片原始尺寸(不是 CSS 缩放后的显示尺寸)。如果用 CSS 把图片缩放到 50%,但没重算 coords,点击区域就会严重偏移。
立即学习“前端免费学习笔记(深入)”;
解决办法只有两个:
- 用原图尺寸设计
coords,再通过img { width: 100%; height: auto; }等比例缩放(此时 area 区域会随图片等比缩放,现代浏览器基本支持) - 或彻底放弃响应式,固定图片宽高,确保
coords与实际渲染像素一致
shape 可选 rect(4 个值:左、上、右、下)、circle(圆心 x、y、半径)、poly(多边形,至少 6 个值,x1,y1,x2,y2…)。
area 不支持 CSS hover 或 JavaScript 事件监听(除非用 trick)
原生 <area> 无法直接绑定 onclick、onmouseover,也不能写 style="cursor: pointer"。浏览器只认 href 和 alt。
如果需要交互反馈,可行方案是:
- 用
href="javascript:void(0)"配合onclick属性(兼容性好,但语义弱) - 用 JS 遍历
document.querySelectorAll('map area'),给每个加addEventListener('click', ...)(注意:IE8- 不支持area的事件冒泡,需降级处理) - 放弃
<area>,改用绝对定位的透明<a></a>或<div> 覆盖图片(更灵活,但需手动维护坐标同步)<h3>替代方案:SVG <code><image></image>+<path></path>更可控当区域形状复杂、需响应式、或要支持动画/渐变/过渡时,
<area>很快会力不从心。SVG 是更现代的选择:<svg viewBox="0 0 800 600"> <image href="plan.png" width="800" height="600"/> <path d="M10 20 L110 20 L110 120 L10 120 Z" fill="none" stroke="transparent" onclick="goToRoom('a')"/> </svg>好处是:
path支持任意矢量路径、可直接加 CSS 类、能用transform缩放、事件监听无兼容问题。缺点是需要把位图和矢量逻辑耦合,且旧版 IE 对 SVG 支持有限。真正难的不是怎么写
area,而是判断当前需求是否还值得用它——坐标维护成本、响应式适配、交互扩展性,这些常被低估。



















