inherit 沿继承链向上查找首个声明值,非渲染结果;initial 为规范定义的初始值,无视浏览器默认;unset 智能选择 inherit 或 initial;不可继承属性用 inherit 实际等价于 initial,border 是例外。

inherit 只往上找声明值,不看父元素当前渲染效果
它不是复制父元素“算出来是什么”,而是沿着继承链向上搜索第一个写了该属性的祖先(比如 body 或 html),取它的原始声明。如果整条链都没写,才 fallback 到浏览器 UA 样式或 initial。
常见翻车点:
-
display: inherit在div上会变成inline,因为display不可继承,实际走的是initial -
color: inherit拿到的是color: var(--text)这种声明,不是变量展开后的#222 -
border: inherit会完整继承父元素写的border: 2px solid #007bff,但若父元素没设 border,子元素就啥也没有
initial 是“规范初始值”,和浏览器默认样式不是一回事
initial 完全按 CSS 规范定义的初始值来,不管浏览器怎么渲染、也不管元素类型。它切断所有上下文,是真正意义上的“出厂设置”。
典型表现:
-
display: initial永远是inline,哪怕你用在button或div上 -
box-sizing: initial是content-box,后续padding和border会撑大尺寸 -
font-family: initial是serif,不是系统默认字体,也不是你设的system-ui -
margin: initial是0,但p元素原本的1em间距就彻底没了
unset 是“智能切换”:可继承就 inherit,否则 initial
它省得你查 MDN 判断每个属性是否可继承。color: unset ≡ color: inherit;width: unset ≡ width: initial(即 auto)。
但要注意:
-
all: unset会重置direction、contain、touch-action等冷门关键属性,RTL 文本可能乱序,动画性能下降,移动端点击无反馈 - 想安全重置组件,别一股脑
all: unset,优先显式列出:color: unset; font: unset; text-align: unset; - 响应式中用
font-size: unset比写font-size: 1rem更自然,它尊重父级是否设置了字号
position、margin、border 这些不可继承属性用 inherit 就等于 initial
MDN 明确标注 Inherited: no 的属性,加 inherit 并不会真去继承——它只是语法合法,实际行为就是回退到 initial 值。
所以:
-
position: inherit和position: initial效果完全一样,都是static -
margin: inherit等价于margin: initial(即0),不是继承父元素的 margin 声明(因为 margin 本来就不继承) -
border: inherit是个例外——它虽不可继承,但浏览器允许你这么写,且会尝试继承父元素声明;而border: initial是none,两者效果不同
all 简写带来的副作用:它不只动视觉属性,还会重置 unicode-bidi、contain、touch-action 这类影响行为与性能的底层属性。日常开发里,宁可多写两行 unset,也别迷信 all: unset。前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











