area标签必须嵌套在map内且为直接子元素,配合usemap属性使用;不支持纯锚点跳转、坐标不随缩放自适应、无键盘焦点支持,需js或svg替代以保障可用性与无障碍。

area 标签不能独立存在,必须配合
它不是个“能直接用”的链接元素,而是一个协作型组件。单独写一个 <area> 标签,浏览器会完全忽略——既不渲染,也不响应点击。常见错误是把它丢在 里,或者包在 <div> 中:<code><map><div><area></div></map>,这会导致整个区域失效。
正确结构只有这一种链路:<img usemap="#my-map"> → <map name="my-map"></map> → <area>(且必须是 <map></map> 的直接子元素)。usemap 值必须以 # 开头,name 值必须完全一致(区分大小写),缺一不可。
href 行为受限:area 不支持纯锚点跳转(如 #section1)
你不能给 <area href="#section1">,期望它像 <a href="#section1"></a> 那样滚动到页面某处。几乎所有主流浏览器都会静默忽略这种写法,或报 Failed to load resource 错误(因为把 #section1 当作绝对路径去请求了)。
可行方案只有三种:
-
href="./page.html#detail(带文件路径的完整锚点) -
href="javascript:void(0)"+ JS 监听click后调用scrollIntoView() -
href指向真实存在的外部 URL 或相对路径资源(如./contact.html)
想实现“点击图片某块跳到本页某段”,JS 是绕不开的。
coords 坐标系统固定,不随图片缩放自适应
<area shape="rect" coords="10,20,100,80"> 这组坐标是按原始图片像素定义的。一旦你用 CSS 缩放 <img>(比如 width: 50%),热点区域不会跟着缩放,点击位置就偏了。
解决办法有限:
- 放弃缩放,用原图尺寸显示(最简单但不灵活)
- 用 JS 动态读取图片实际宽高,按比例重算
coords并重写<area>(需监听resize和load) - 换 SVG:它天然矢量、可缩放、支持事件绑定,
<area>在现代项目中基本只用于兼容老系统
移动端尤其要注意:coords 定义的热区若小于 44×44px,手指点击极易误触或无响应。
area 没有默认焦点样式,键盘可访问性极弱
<a></a> 元素天然支持 Tab 键聚焦、Enter 触发,还能用 :focus 加样式。但 <area> 在所有浏览器中都不触发 :focus,也无法被键盘选中——这意味着屏幕阅读器用户和键盘操作者根本无法使用这些热点。
如果项目需要 WCAG 合规,必须手动补足:
- 给每个
<area>加alt属性(必需,否则无障碍工具无法识别) - 用 JS 绑定
keydown事件监听Enter/Space - 提供替代导航(比如下方加一组普通
<a></a>文字链接,用aria-hidden="true"隐藏视觉但保留语义)
这不是“锦上添花”,而是 <area> 在真实产品中落地时最容易被跳过的硬门槛。











