inherit向上查找父元素声明值而非计算值,initial按规范回退初始值,unset依继承性智能选择;三者语义不同,误用会导致样式或交互异常。

inherit 是“往上找声明值”,不是复制父元素当前颜色或尺寸
它不取父元素最终渲染出的计算值,而是沿着 DOM 树向上,找第一个设置了该属性的祖先(比如 body 或 html),拿它的原始声明值。比如 color: var(--text) 被继承,子元素拿到的就是 var(--text) 这个字符串,不是展开后的 #333。
常见翻车点:
-
svg { fill: inherit }本想随文字变色,结果只继承了变量名,没生效 -
div { display: inherit }——display不可继承,实际退到display: initial(即inline),布局崩了 - 对
border、background这类默认不继承的属性加inherit,确实能生效,但继承的是父元素写的声明(比如background: linear-gradient(...)),不是渲染结果
initial 是“按规范回出厂设置”,和浏览器默认样式无关
它完全无视 UA 样式表和你写的重置规则,只认 W3C 规范里写的初始值。比如 display: initial 永远是 inline,哪怕它是 div;margin: initial 是 0,不是浏览器给 p 设的 1em。
容易误用的场景:
-
button { all: initial }后按钮变inline、无 padding、无cursor: pointer,点击区域消失 -
box-sizing: initial是content-box,不是你项目里惯用的border-box -
font-family: initial是serif,不是系统默认字体
unset 是“看属性能不能继承”,自动分流
它不需你手动查 MDN 判断继承性:可继承属性(如 color、font-size)走 inherit,不可继承属性(如 position、width)走 initial。所以 position: unset 等价于 position: initial(都是 static),但语义上表示“按规则来”。
实战中要注意:
-
all: unset会同时重置contain、direction、unicode-bidi这些冷门但关键的属性——RTL 文本可能乱序,动画性能可能下降,可访问性标签可能失效 -
cursor: unset会退回initial(auto),但在某些上下文中变成default,导致按钮点击无反馈 - 未显式设
box-sizing时,unset让它走initial(content-box),后续padding会撑大尺寸
revert 不在标题里,但常被一起问——它依赖浏览器 UA 样式实现
revert 目标是还原成用户实际看到的浏览器默认样式,比如 p { margin: revert } 会恢复成上下 1em。但它不是万能的:Safari 对部分属性仍 fallback 到 initial,Chrome/Firefox 支持较好。别把它当 initial 的增强版,它解决的是另一类问题——“怎么回到我肉眼看到的那个默认样子”。
真正难的不是记清三者定义,而是意识到 all: unset 或 all: initial 会一口气干掉几十个属性,其中有些你根本没注意到,比如 user-select 或 touch-action,一设就让文本无法选中、页面无法滑动——这种问题往往要调试半天才定位到源头。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











