inherit是强制沿继承链向上查找首个设值祖先并取其声明值,而非复制父元素计算值;对可继承属性如color有效,对display等不可继承属性则回退到initial。

inherit 是强制“往上找”,不是“复制父元素当前样式”
很多人以为 inherit 就是把父元素当前计算出的值原样拿过来,其实它走的是 CSS 继承链:从父元素开始,一层层向上查找,直到找到第一个设置了该属性的祖先(包括根元素 html),再取它的声明值;如果整条链都没设,就用浏览器的 user agent style;还找不到,才 fallback 到 initial。比如:
-
color是可继承属性,.child { color: inherit }会拿到.parent的color值,哪怕父元素的color来自更上层的body -
display不可继承,div { display: inherit }实际会回退到display: initial(即inline),而不是父div的block - 用在伪元素上要小心:
::before { content: "x"; color: inherit }继承的是宿主元素的color,不是父容器的
initial 只认规范定义,和浏览器默认表现可能不一致
initial 不看元素类型,也不管浏览器怎么渲染,默认只按 W3C 规范里写的“初始值”来设。例如:
-
display: initial永远是inline,不管它是div还是p—— 而浏览器对div的 user agent style 是display: block -
margin: initial是0,但浏览器给p设的默认 margin 是1em,所以它不会恢复成你看到的段落间距 - 某些属性的初始值反直觉:
background-color: initial是transparent,不是白色;font-size: initial是medium,不是16px
unset 是“智能切换”:继承属性走 inherit,非继承属性走 initial
unset 的行为完全由属性是否可继承决定,不需要你手动判断。查 MDN 时注意每个属性页的 “Inherited: yes/no” 标记:
-
color: unset≡color: inherit(因为color可继承) -
border: unset≡border: initial(因为border不可继承,initial值为none) -
font-family: unset会继承父元素字体;width: unset会变auto(width的初始值) - 适合批量重置:
* { all: unset }相当于把所有可继承属性继承、不可继承属性清空,但慎用——它会干掉display、position等关键布局属性
revert 试图还原“用户看到的默认”,但兼容性仍是硬伤
revert 的目标是回到浏览器实际应用的 user agent style,比如 p { margin: revert } 会恢复成上下 1em,而不是 0 或 initial。但它依赖两点:
- 浏览器必须实现了 user agent stylesheet 中该元素+属性的规则(Chrome/Firefox 支持较好,Safari 对部分属性仍 fallback 到
initial) - 如果有 CSS reset 库(如 normalize.css)或全局
* { margin: 0 },revert会尝试绕过它们,直接读 UA 表——但实际行为不稳定,尤其在复杂层叠场景下 - 不能用于简写属性重置整个块:
font: revert无效,必须拆成font-size: revert; font-weight: revert等 - 目前还不支持在
@keyframes或 SVG 属性中使用
真正容易被忽略的是:这四个关键字在计算优先级时都属于“声明值”,不改变选择器权重。但 revert 在层叠顺序中比普通声明更高——它会压制同级的类名规则,却压不住 !important。上线前务必在目标浏览器里实测,尤其是 revert 和旧版 Safari 的组合。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











