area元素无法直接应用:hover或:focus样式,因其无渲染盒;需用绝对定位的div覆盖图片并映射coords坐标,通过JS控制交互状态与视觉反馈。

area 元素不能直接加 hover 或 focus 样式
HTML 的 是 内的不可见热区,浏览器不支持对其直接应用 :hover、:active 或 :focus 伪类——哪怕加了 tabindex 也无效。这不是你写错了,是规范限制:area 没有渲染盒(rendering box),CSS 选择器根本匹配不到它。
常见错误现象:area:hover { background: red; } 完全不生效;用 JS 给 area 添加 class 后再设样式,依然没反应。
- 必须把视觉反馈“嫁接”到对应的可渲染元素上,通常是覆盖在图片上的 或
- area 只负责坐标定义和事件绑定,样式和交互状态要靠外层容器承载
- 如果用的是
,那真正能加样式的对象是本身,或其父级定位容器用绝对定位容器模拟可响应区域
核心思路:把每个
area的coords值转为 CSStop/left/width/height,套一个带 class 的盖在图片上,再对这个 div 做样式控制。示例结构:
<div class="image-map"> @@##@@ <div class="area-overlay" data-area="room-a" style="top: 20%; left: 30%; width: 15%; height: 12%;"></div> <div class="area-overlay" data-area="room-b" style="top: 45%; left: 10%; width: 20%; height: 18%;"></div> </div>
- 确保
.image-map设position: relative,让子元素能相对定位 - 所有
.area-overlay设position: absolute; pointer-events: none(初始不拦截鼠标) - 在 JS 中监听
mousemove或mouseenter,根据鼠标位置匹配 coords 范围,再给对应.area-overlay加pointer-events: auto和is-hovered类 - 避免用
z-index层叠干扰:overlay 必须在 img 上层,但不能挡住 img 的原生点击事件(除非你接管全部逻辑)
点击后保持高亮要用 JS 管理状态
area 本身没有 “选中” 概念,
checked、selected这类属性对它无效。持久高亮只能靠 JS 记录状态并操作 DOM。- 不要依赖
area.getAttribute('href')判断是否激活——它只是跳转地址,不是状态标识 - 推荐用数据属性统一管理:
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











