initial 是规范定义的出厂值,display: initial 为 inline 而非 block,margin: initial 为 0,font-family: initial 为 serif;unset 按继承性自动选择 inherit 或 initial;revert 试图还原浏览器 ua 样式但兼容性差;all: unset 会静默破坏 contain、direction 等关键属性。

initial 是“规范定义的出厂值”,不是浏览器默认样式
很多人看到 display: initial 期望它让 div 还原成 block,结果却是 inline——因为 CSS 规范里 display 的初始值就是 inline,和元素类型无关。同理:margin: initial 是 0,但浏览器给 p 默认加了 1em 上下边距;font-family: initial 是 serif,不是系统 San Francisco 或 Segoe UI。
常见踩坑点:
-
button { all: initial }后按钮变inline、无padding、无cursor: pointer,点击区域几乎消失 -
box-sizing: initial回到content-box,后续写padding会意外撑大尺寸 - IE 完全不支持
initial,Safari 9 以下也不支持
unset 是“继承性智能开关”,按属性是否可继承自动分流
unset 不查文档、不记规则,只看一个事实:该属性在 CSS 规范中标注为 Inherited: yes 还是 no。是就走 inherit,否就走 initial。
例如:
-
color: unset→ 等效color: inherit(color可继承) -
border: unset→ 等效border: initial(即border: none) -
width: unset→width不可继承,走initial,结果是auto
但它对 display 很危险:display: unset = display: initial = inline,几乎所有容器都会塌缩。别用它重置布局属性,除非你明确想让它变行内元素。
revert 是“试图还原用户实际看到的浏览器默认”,但兼容性极差
revert 的目标不是规范值,也不是父元素值,而是浏览器 user agent stylesheet 里真正在用的那条规则。比如:p { margin: revert } 在 Chrome 中恢复为 1em,不是 0 也不是 normal;button { padding: revert } 会尝试拿回 Chrome 默认的 4px 8px。
但问题在于:
- Safari 9.1+ 和 iOS 9.3+ 才开始支持,Android WebView 基本不认
- 不同浏览器 UA 样式不一致:Firefox 的
input默认border是1px inset,Chrome 是2px groove,revert表现就不同 -
all: revert在部分浏览器中会 fallback 到unset,行为不可控
真正容易被忽略的点:all: * 类批量重置会静默破坏关键属性
写 all: unset 看似省事,但它会同时重置 contain(影响渲染性能)、direction(RTL 文本翻转)、unicode-bidi(影响阿拉伯语/希伯来语排版)、touch-action(导致移动端手势失效)这些冷门但关键的属性。DevTools 里看不到报错,但用户反馈“按钮点不动”“阿拉伯文字从右往左乱了”,问题就出在这儿。
更稳妥的做法是显式列出要重置的属性:color: unset; font: unset; text-align: unset;,避开 display、position、contain 这类高风险项。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











