area元素不支持autofocus属性,需通过为关联img设置tabindex="0"并用JavaScript调用focus()实现焦点控制,同时配合ARIA标签和:focus-visible样式确保可访问性。

area 元素本身不支持 autofocus
直接给 <area> 标签加 autofocus 属性无效——HTML 规范明确禁止该属性用于 <area>。浏览器会忽略它,焦点也不会自动落到对应区域上。真正能获得焦点的是其关联的 <img> 或其他可聚焦元素,而 <area> 只是“热区”定义,不具备焦点能力。
用 tabindex 让 area 关联的 img 可聚焦,并手动触发 focus()
核心思路是:让图像可聚焦(tabindex="0"),再通过 JavaScript 在页面加载后对目标 <area> 对应的坐标或 ID 做逻辑映射,调用 focus() 到图像上,并配合 scrollIntoView() 确保可见。常见做法:
-
<img>必须设置usemap且与<map></map>的name匹配,同时添加tabindex="0" - 在
<map></map>内为关键<area>设置id(如id="btn-contact"),便于 JS 定位 - 用
document.getElementById("btn-contact")获取该 area,再通过其parentNode找到<map></map>,最终反查绑定的<img>(需确保 DOM 结构清晰) - 更稳妥的做法是直接给
<img>设id,并在 JS 中显式调用document.getElementById("main-img").focus()
键盘导航下 area 缺失焦点样式?补上 outline 和 :focus-visible
即使图像获得了焦点,若没定义视觉反馈,用户无法感知当前聚焦位置。尤其屏幕阅读器或纯键盘操作时,必须提供明确焦点指示:
将 Markdown 文章转换为微信公众号兼容的纯 HTML 格式。当用户要求"转成微信格式"、"生成公众号文章 HTML"、"排版到微信草稿箱"、"微信粘贴格式"时触发。输出带内联样式的纯 HTML,微信编辑器可直接渲染,无需额外适配。支持标题、段落、列表、粗体、行内代码、表格、引用块、代码块、配图的完整转换。
- 默认
outline可能被 CSS 重置(如* { outline: none; }),需单独为可聚焦图像恢复:img[tabindex="0"]:focus { outline: 2px solid #007bff; } - 推荐使用
:focus-visible实现“仅键盘触发时显示轮廓”,避免鼠标点击后干扰:img[tabindex="0"]:focus-visible { outline: 2px solid #007bff; } - area 本身不能响应
:focus,所以不要写area:focus—— 它永远不会匹配
aria-label 或 aria-labelledby 是 area 可访问性的关键补充
area 没有 innerText,屏幕阅读器无法朗读其用途。仅靠 alt 属性无效(<area> 不支持 alt)。必须用 ARIA 显式标注:
- 对每个重要
<area>添加aria-label="跳转到联系我们页面",值需准确描述功能 - 若文字已存在于页面某处(比如旁边有隐藏文本),可用
aria-labelledby="label-contact" - 别漏掉
href或onclick逻辑:area 通常配合href(跳转)或 JS 事件,确保键盘回车/空格也能触发相同行为
实际可访问的最小可行结构示例:
@@##@@ <map name="building-map"><area shape="rect" coords="100,100,200,150" href="/contact" aria-label="联系我们入口" id="area-contact"></map>然后在 JS 中:
document.addEventListener("DOMContentLoaded", () => {
document.getElementById("floor-plan").focus();
});
area 的交互本质是“图像上的语义化锚点”,它自己不承载焦点、不渲染、不发声——所有可访问性补全都得靠 img + tabindex + ARIA + JS 协同完成。最容易被忽略的是:忘了让 img 可聚焦,或用了 area:focus 这种永远不生效的选择器。

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










