:disabled伪类可直接控制原生表单控件禁用样式,无需JS或额外class;自定义组件需配合ARIA属性和CSS类;注意选择器优先级、可访问性(对比度、pointer-events等)及浏览器兼容性。
直接用 :disabled 伪类就能控制禁用状态的样式,不需要 JavaScript 干预,也不用额外加 class。
只有表单控件(如 、、、)才原生支持 disabled 属性和 :disabled 伪类。自定义组件(比如 div 模拟的按钮)不会响应 :disa,除非你用
bledrole="button" + aria-disabled="true" 并配合额外 CSS 类手动控制。
按钮(disabled 对 div 是无意义的 HTML 属性)很多项目里禁用样式没生效,其实是其他规则(比如全局重置、组件库默认样式、内联 style)优先级更高,把 :disabled 覆盖掉了。
:disabled 规则是否被划掉button:disabled 替代 :disabled,或加 !important(仅限兜底,不推荐滥用)*:disabled 容易被后续更具体的规则压倒仅改颜色或透明度可能让残障用户难以识别禁用状态。建议组合使用:
opacity: 0.5;)pointer-events: none; 防止误点,但注意这会影响焦点行为)input[type="checkbox"]:disabled + label 这类组合选择器很常用,但要注意:
:disabled 下的 accent-color 支持有限)::before/::after)+ input:disabled 控制外观,隐藏原生控件再重绘
label 文字的禁用态(比如 input:disabled + label { color: #999; cursor: not-allowed; })基本上就这些。只要元素合法、选择器有效、优先级够用,:disabled 是最轻量也最可靠的禁用样式方案。