all: unset 在 ie 中完全无效,因 ie 不识别 all 属性和 unset 关键字;需手动重置 margin、padding、border 等属性;all: revert 更安全但 android 10 及更早 webview 不支持。

不能安全使用——IE 和旧版 Android WebView 会直接忽略整条规则,连降级机会都不给。
为什么 all: unset 在 IE 中等于没写
IE(包括 IE11)根本不认识 all 这个属性名,也不识别 unset 关键字。遇到 all: unset,浏览器直接跳过整条 CSS 声明,既不报错,也不尝试 fallback,更不会部分生效。连 @supports (all: unset) 都无效,因为 IE 连 @supports 语法都不支持。
这意味着:你写了 all: unset,在 IE 里就跟没写一样;父级传来的样式、UA 默认样式、甚至你自己写的其他规则,全都照常作用。
哪些属性必须手动重置才能接近效果
想在 IE8+ 中模拟 all: unset 的“干净起点”,只能显式列出关键非继承属性,并用 IE 安全值赋值:
-
margin: 0和padding: 0:不能用margin: initial(IE 不认) -
border: none:border: initial在 IE 中无效,none是唯一可靠值 -
font-size: 100%:避免 UA 默认字号漂移,比initial更稳 -
line-height: normal:IE 支持normal,数值如1.2也可,但需注意继承链 -
color: #000或color: black:不用initial(IE 不认),写死最保险;若需继承,改用color: inherit -
text-decoration: none:针对<a></a>、<ins></ins>、<del></del>等 -
list-style: none:清除项目符号,不碰display -
vertical-align: baseline:防止 inline 元素对齐错位
all: unset 对 button/input 边框和焦点轮廓无效的真正原因
这不是兼容性问题,而是层叠优先级误解:all: unset 把 border 设为 initial(即 none),但它无法覆盖 UA 样式表中高权重的规则,比如:
button { border: 2px outset buttonface; }
这条 UA 规则权重更高,层叠后仍生效。所以按钮边框还在——不是 all: unset 没起作用,是它压根没赢过 UA 选择器。
真正能恢复原生状态的是 all: revert,它会主动查找并应用 UA 样式表中对该元素定义的值(比如让 <button></button> 恢复默认边框、手型光标、聚焦 outline)。但注意:all: revert 在 Android 10 及更早 WebView 中仍不支持。
现代项目中该选 unset 还是 revert
all: revert 是多数场景下更安全的选择,尤其涉及表单控件时。它保留了可访问性基础(如键盘聚焦轮廓、鼠标光标样式),而 all: unset 会把这些全设为 initial,导致 outline: 0、cursor: auto、border: none,功能性直接退化。
但 all: revert 不继承父级样式——如果父级设了 color: red,加了 all: revert 的 <button></button> 文字仍是 UA 默认深灰色,不是红色。
支持情况:Chrome 93+、Firefox 95+、Safari 14.1+ 均良好;Android 10 及更早 WebView 仍不支持,需降级 fallback。
最容易被忽略的是:无论用 unset 还是 revert,它们都只作用于当前元素的 CSS 属性计算过程,不改变 DOM 结构、不修复缺失的语义、不兜底 JS 行为异常。真正在老浏览器里跑稳,得靠手动补关键样式 + 显式声明 display + 实测 focus/keyboard/mouse 交互链路。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











