
理解 initial、inherit、unset 最有效的方式,不是背定义,而是先问“这个属性本来会不会继承”。因为 unset 的行为就取决于这一点。文本颜色、字体这些通常会继承;宽高、边距、背景、定位这些通常不会。

目录
- 三个关键字先看结论
- 哪些属性通常会继承
- 哪些属性通常不会继承
- initial、inherit、unset 的真实差异
- 什么时候该用 inherit
- 什么时候该用 initial
- 什么时候该用 unset
- 实战里怎么选
- 参考资料
三个关键字先看结论
| 关键字 | 作用 | 适合什么时候用 |
|---|---|---|
initial |
设回属性初始值 | 明确要“重置为默认规则” |
inherit |
强制拿父元素当前值 | 明确要和父元素保持一致 |
unset |
可继承属性时像 inherit,否则像 initial |
不想手动判断继承规则时 |
最容易误解的是:initial 不是“恢复浏览器当前看到的样子”,而是“恢复这个属性在规范里的初始值”;inherit 也不是“像平时那样自然继承”,而是无论该属性本来是否可继承,都强制继承父值。
哪些属性通常会继承
大体上,和文本呈现强相关的属性会继承:
colorfont-familyfont-sizefont-weightline-heighttext-alignletter-spacingword-spacingvisibilitycursor
所以这种写法很常见:
article {
color: #d4d2cb;
line-height: 1.8;
}
子元素大多会自动沿用这些值,不需要你一层层重复写。
如果你发现字号和间距的相对关系很混乱,往往不是 inherit 没写,而是根字号、em / rem 体系本身没理顺。这个问题可以配合看 rem 与根字号指南。
哪些属性通常不会继承
布局和盒模型属性通常不会继承:
widthheightmarginpaddingborderdisplaypositiontop/right/bottom/leftbackgroundoverflowtransformz-index
这是合理的。否则父元素一改 display: flex 或 position: relative,所有子元素都跟着继承,布局会非常难控制。
initial、inherit、unset 的真实差异
先看一个最容易理解的可继承属性:color。
<div class="parent">
<p class="a">initial</p>
<p class="b">inherit</p>
<p class="c">unset</p>
</div>
.parent {
color: royalblue;
}
.a {
color: initial;
}
.b {
color: inherit;
}
.c {
color: unset;
}
结果通常是:
.a回到颜色初始值.b继承父元素的royalblue.c因为color本来可继承,所以效果等同于inherit
再看一个不会继承的属性:margin-left。
.parent {
margin-left: 40px;
}
.a {
margin-left: initial;
}
.b {
margin-left: inherit;
}
.c {
margin-left: unset;
}
此时:
.a回到初始值.b会强制拿到父级40px.c因为margin-left默认不继承,所以效果更像initial
这就是为什么 unset 常被理解成“按属性继承特性自动选边站”。
什么时候该用 inherit
inherit 适合你明确知道“这个子元素就该和父元素一致”的场景,比如 SVG 图标继承文本颜色:
.button {
color: white;
}
.button svg {
fill: currentColor;
}
或者你要让某个原本不继承的属性也继承:
.card {
border-radius: 16px;
}
.card img {
border-radius: inherit;
}
这里比重复写 16px 更稳,也避免以后父元素改半径时忘记同步。
什么时候该用 initial
当组件被包在很多上层样式里,而你想明确切断某个继承结果时,用 initial 更直接:
.editor {
text-align: center;
}
.editor code {
text-align: initial;
}
不过要注意,initial 是回到属性初始值,不一定等于“浏览器默认展示结果”。所以用它前最好知道该属性的初始行为。
什么时候该用 unset
unset 更像一个中性选择,适合做通用组件重置:
.button-reset {
all: unset;
}
或者针对单个属性:
.field {
color: unset;
margin: unset;
}
它的优点是不需要你逐个判断属性是否可继承;缺点是团队里如果大家不清楚继承规则,读代码时会多一步脑内判断。
实战里怎么选
- 想恢复属性自己的默认规则:
initial - 想明确跟父级同步:
inherit - 想让浏览器按继承规则自动决定:
unset
如果你是在处理动画或覆盖层问题,不要把层级、图层和继承混在一起。z-index 失效通常和继承没关系,而是 Stacking Context 与 z-index 规则;动画卡顿更多是 重排与重绘。
参考资料
继续阅读
css中的3d使用:深入理解 CSS Perspective 与 Transform-Style
和是 CSS 3D 变换中不可或缺的两个属性。赋予了场景深度,模拟了观察者的视觉体验;而则决定了子元素如何在 3D 空间中呈现。掌握这两个属性的用法,将为您的网页设计带来更丰富的视觉层次和更具吸引力的交互体验。现在,不妨动手尝试一下,释放您的创意,打造出令人惊叹的 3D 世界吧!
10 分钟深入理解CSS对齐属性:align-items, align-self, justify-items, justify-self
属性作用对象方向适用布局覆盖关系容器垂直Flex/Grid被align-self覆盖align-self子项垂直Flex/Grid覆盖容器水平Grid被覆盖子项水平Grid覆盖记忆口诀想调垂直用align,想调水平用justify容器设置用-items,单个调整用-selfGri
2 分钟重排与重绘:CSS 动画为什么会卡
把浏览器渲染中的样式计算、布局、重绘和合成拆开解释,说明哪些 CSS 属性更容易触发布局开销,以及为什么 transform 和 opacity 通常更适合做动画。
订阅 FreeMac
每周精选:免费 Mac 软件评测、可信来源更新、替代方案和少折腾指南。