如何不使用all: unset还原button:disabled的默认样式?
可以实现,只需要针对性重置浏览器对button:disabled预设的所有默认样式即可,不需要使用all: unset。
不同浏览器给禁用按钮添加的默认属性不完全一致,常规需要覆盖的属性如下:
- 透明度(opacity):大部分浏览器默认会把禁用按钮的opacity设为0.5~0.7左右,你写的
opacity:1没生效大概率是选择器优先级不够,可以把选择器写得更具体,比如加类型限定button[type="button"]:disabled,或者临时加!important先测试是否是优先级问题。 - 鼠标样式(cursor):默认是
not-allowed,要还原成普通按钮的default - 文字颜色(color):很多浏览器会把禁用状态的文字改成浅灰色,需要改回正常按钮的文字色
- 背景色(background-color):默认会改成浅灰色,改回正常按钮的背景色
- 边框(border):部分浏览器会修改边框颜色甚至样式,要对齐普通按钮的边框配置
- 滤镜(filter):部分webkit内核浏览器会给禁用元素加灰度滤镜,需要设为
none - 可交互性相关:如果不需要阻止点击触发,
pointer-events可以设为auto,默认部分浏览器会设为none
完整重置示例:
/* 正常按钮的基础样式 */ button { background-color: #409eff; color: #fff; border: 1px solid #409eff; padding: 4px 12px; cursor: default; opacity: 1; filter: none; } /* 禁用状态完全对齐正常状态的样式 */ button:disabled { opacity: 1 !important; cursor: default; color: #fff; background-color: #409eff; border: 1px solid #409eff; filter: none; pointer-events: auto; }
如果依旧不生效,可以打开浏览器开发者工具,选中禁用状态的按钮,在样式面板里勾选:disabled状态伪类,就能看到所有被应用的样式,被划掉的就是被覆盖的属性,顺着调整即可。
内容的提问来源于stack exchange,提问作者Charlie
相关产品推荐
相关产品推荐

