inert 属性能禁用按钮但不触发 disabled 行为,因为它作用于整个元素及其子树,使按钮不可聚焦、不可点击、不被屏幕阅读器访问,却不改变其表单属性(如 value)或提交逻辑;disabled 仅适用于表单控件且需逐个设置,而 inert 是容器级、语义化的原生交互隔离机制。

inert 属性为什么能禁用按钮但又不触发 disabled 行为
inert 是 HTML 原生属性,作用是让整个元素及其所有子节点(包括 button、input、a、details 等)对用户交互“失活”:无法聚焦、无法点击、无法被屏幕阅读器访问。它和 disabled 的关键区别在于:disabled 只作用于表单控件且必须逐个加在控件上;而 inert 可以直接加在父容器上,一次性封住整片区域,且不影响表单控件本身的 value 或提交逻辑。
注意:inert 不会改变元素的视觉样式——按钮依然显示为可点击状态,只是实际无效。你需要配合 CSS 手动灰掉它,否则用户会产生困惑。
怎么给非活动区域加 inert 并确保按钮真正不可点
直接在包裹容器上设置 inert 属性即可,例如侧边栏收起时禁用主内容区外的所有操作区:
<div id="sidebar" inert> <button>保存设置</button> <input type="text" value="test"> </div>
但要注意以下几点:
-
inert是布尔属性,写成inert或inert=""效果相同,但不要写成inert="false"——那会被当成字符串值,浏览器仍会启用 inert 行为 - 动态添加时用
element.inert = true(JS 属性),而不是element.setAttribute('inert', 'true')(这是错误的 DOM 属性写法) - 如果区域里有
contenteditable="true"元素,inert会让它失去编辑能力,但光标可能仍能进入——需额外加user-select: none和pointer-events: none防止误触
兼容性差怎么办?inert 在 Safari 和旧版 Chrome 怎么 fallback
目前 inert 在 Chrome 105+、Edge 105+、Firefox 122+ 原生支持,但 Safari 完全不支持(截至 Safari 17.4),且没有计划加入。不能只靠它做核心交互控制。
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
推荐组合方案:
- 用
inert作为首选,语义清晰、开销低 - 同时加一层 CSS 锁定:
pointer-events: none+tabindex="-1"+aria-hidden="true"(针对焦点和读屏) - 关键按钮上再加 JS 判断:
if (container.hasAttribute('inert')) return;,双重保险 - 需要 polyfill 时,用 WICG/inert,但它会监听 DOM 变化并打补丁,有性能开销,仅用于必须支持 Safari 的场景
为什么禁用后按钮还能被键盘 Tab 到?
inert 本身会阻止元素获得焦点,但如果按钮原本有 tabindex="0" 或是原生可聚焦元素(如 button),而你只加了 inert 却没移除其 tabindex,部分浏览器(尤其是 Safari fallback 场景)可能仍会把它纳入 tab 顺序。
稳妥做法是:加 inert 的同时,显式移除或覆盖焦点能力:
- 用 JS 批量处理:
container.querySelectorAll('button, input, a, [tabindex]').forEach(el => el.tabIndex = -1) - 用 CSS 强制屏蔽:
[inert] button, [inert] input { pointer-events: none; } [inert] * { tabindex: -1 !important; } - 避免依赖
tabindex="0"的自定义组件——它们在inert下行为最不稳定
真正麻烦的不是加 inert,而是清理残留的焦点路径和可访问性状态。只要有一处漏掉,就可能让键盘用户卡在“看不见却能 Tab 到”的按钮上。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










