area 标签支持 title 属性,但仅当关联的 img 正常加载且 coords 有效时才触发原生 tooltip;失效常见于图片 404、usemap 拼写错误或坐标越界;推荐用 data-tip + js 动态 tooltip 实现跨端兼容。

area 标签本身不支持 title 属性悬停提示?
不是不支持,而是 title 属性在 <area> 上**确实能生效**,但行为受限:仅当该 <area> 属于一个已绑定 <map></map> 的 <img>,且图片正常加载、坐标有效时,浏览器才会触发原生 tooltip。常见失效场景包括:图片 404、usemap 值拼写错误(漏掉 #)、shape 和 coords 超出图片尺寸。
实操建议:
- 务必检查
<img usemap="#myMap">与<map name="myMap"></map>的 name/id 是否完全一致(含大小写) - 用开发者工具的“元素”面板 hover 到
<area>,看是否高亮对应区域;若不响应,说明坐标或 shape 有误 -
title值不要含换行或双引号,避免 HTML 解析异常
用 CSS + JavaScript 模拟 hover 提示更可靠
原生 title 不可控(样式、延迟、位置),且在移动端无 hover。推荐用 data-tip 自定义属性 + 绝对定位 <div> 实现:
<pre class="brush:php;toolbar:false;">@@##@@
<map name="floor"><area shape="rect" coords="10,20,100,80" data-tip="会议室 A,可容纳 12 人" href="#"></map><div id="tooltip" style="position: absolute; background: #333; color: #fff; padding: 4px 8px; border-radius: 3px; font-size: 12px; pointer-events: none; opacity: 0; transition: opacity 0.2s"></div></pre>
<p>关键 JS 逻辑(需确保 DOM 加载完成):</p>
<ul>
<li>监听 <code>map 的 mouseenter 和 mouseleave 事件(注意:直接绑 area 无效,因它不渲染为可见元素)
event.target 获取触发的 <area>,读取 dataset.tip
getBoundingClientRect() 计算鼠标位置,动态设置 #tooltip 的 top/left
mousemove 中频繁重排,可加 requestAnimationFrame 节流area 坐标系和图片缩放导致提示错位?
如果 <img src="plan.png" usemap="#floor" alt="楼层图"> 用了 width/height 或 CSS transform: scale(),但 <area coords> 仍按原始图片尺寸写,悬停提示的位置就会偏移。
解决方式分两种:
- 保持图片原始尺寸显示(推荐):用 CSS
max-width: 100%替代固定宽高,让<area>坐标自然适配 - 动态缩放坐标:监听
window.resize,用img.naturalWidth / img.offsetWidth算出缩放比,再修正 tooltip 的 left/top 偏移量 - 绝对不要用
background-image+<div> 模拟热点 —— <code><area>无法绑定到背景图上移动端 touch 设备如何处理?
手机没有 hover,但用户点击热点后仍需提示信息。不能只依赖
mouseenter,必须补充 touch 支持:- 监听
touchstart替代mouseenter,并立即显示 tooltip - 加
setTimeout延迟 1500ms 自动隐藏,避免遮挡后续操作 - 同时监听
touchend和click(兼容部分安卓浏览器 touch 后触发 click) - 注意:Safari iOS 对
<map></map>的touch事件支持不稳定,建议 fallback 到全图onclick+ 坐标计算
真正麻烦的是坐标映射 —— 图片缩放、viewport 缩放、横竖屏切换都会让
clientX/clientY和coords不再线性对应,这部分逻辑很容易被忽略,但直接影响提示是否准确定位。 - 监听











