前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
首页程序员面试题库CSS inherit initial unset inheritance
CSS层叠与选择器

inherit、initial 和 unset 分别把属性重置到哪个值?

inherit 强制取父元素的计算值,不管属性本身是否可继承。initial 回到 CSS 规范定义的初始值,比如 display 的初始值是 inline,不是浏览器给 <div> 设的 block。unset 看属性天性:可继承的就等于 inherit,不可继承的就等于 initial。

前端进阶之旅 · 一题精讲更新于 2026.09.29
CSS#层叠与选择器
先看核心答案读代码示例
理解线索

三个关键字指向不同的"原点"

  1. inherit不管属性天性,一律拿父元素的计算值
  2. initial回到规范定义的初始值,跟浏览器默认样式表无关
  3. unset可继承属性走 inherit,不可继承属性走 initial

initial 和 revert 最容易混。display: initial 的结果是 inline,因为规范初始值就是 inline。想让 <div> 回到 block,要用 revert。

核心回答

先记住这个答案

CSS 提供了几个特殊关键字来重置属性值。inherit 强制取父元素的计算值,哪怕这个属性本身不会自动继承。initial 把值还原到 CSS 规范里定义的初始值,注意这不是浏览器的默认样式。unset 相当于一个快捷方式:如果属性天然可继承就走 inherit,否则走 initial。面试时最常考的就是 initial 和浏览器默认值的区别。

  • inherit 强制继承,连 margin 也行
  • initial 回规范初始值,不是浏览器默认
  • unset 按属性天性自动二选一
  • revert 才是回到浏览器默认样式

initial 为什么不等于浏览器默认样式

很多人以为 display: initial 会让 <div> 回到 block,但实际拿到的是 inline。因为 CSS 规范规定 display 的初始值就是 inline,是用户代理样式表(也就是浏览器内置的默认样式)给 <div> 设了 display: block。initial 跳过了用户代理样式表,直接回到规范定义。

对比 initial 和 revertCSS
/* 假设外层 div 没有额外样式 */
div.reset-initial {
  display: initial; /* 结果是 inline,规范初始值 */
}
div.reset-revert {
  display: revert; /* 结果是 block,浏览器默认样式 */
}
div.reset-unset {
  display: unset; /* display 不可继承,等于 initial,结果是 inline */
}

这三个关键字对 display 的效果完全不同。revert 才是"恢复到浏览器默认",而 initial 是"恢复到规范定义的初始值"。面试时说清楚这个区别,能体现你对层叠的理解不是停留在表面。

可继承和不可继承属性上的差异

CSS 属性分两类。color 和 font-size 这些天然可继承,子元素没声明时自动拿父元素的值。margin 和 padding 以及 border 和 display 这些不可继承,子元素没声明时用规范初始值。

unset 在两类属性上的表现CSS
.parent {
  color: red;             /* color 可继承 */
  border: 1px solid blue; /* border 不可继承 */
}
.child {
  color: unset;  /* 可继承 → 等于 inherit → 拿到 red */
  border: unset; /* 不可继承 → 等于 initial → 回到 none */
}

unset 的好处是不用记住每个属性是否可继承,它会自动选择合适的回退方式。配合 all: unset 可以一次性清除元素上的所有样式,对组件重置很有用。但要注意 all: unset 会把 display 也重置成 inline,通常还需要手动补上 display 的值。

回答前,多想一步

容易答错的地方

把 initial 当成浏览器默认样式
这是最高频的错误。<div> 写 display: initial 变成 inline 而不是 block,因为 block 来自用户代理样式表,不是规范初始值。想回到浏览器默认样式要用 revert。
以为 unset 总是等于 inherit
只有可继承属性才走 inherit 路径。对 margin 和 padding 这些不可继承属性,unset 等于 initial,回到规范初始值而不是父元素的值。
试着用自己的话回答

面试官还会怎么问?

revert-layer 和 revert 有什么不同?

revert 回退到上一个来源,比如从作者样式回退到用户代理样式。revert-layer 只回退到上一个 @layer,仍然留在同一个来源内。如果你用 @layer 管理组件库和业务样式的优先级,revert-layer 可以让某个属性回退到更早的层,而不是直接跳到浏览器默认样式。

all: unset 和 all: revert 哪个更适合做组件重置?

all: unset 把所有属性恢复到规范初始值或继承值,可能导致 <div> 变成 inline,列表失去样式。all: revert 恢复到浏览器默认样式,<div> 还是 block,<ul> 还有默认的列表样式。做组件重置通常用 all: revert 更安全。

inherit 取的是父元素的什么值?

取的是父元素的计算值,不是 CSS 源码里写的值。如果父元素写了 font-size: 2em,子元素通过 inherit 拿到的是换算后的像素值(比如 32px),不是 2em。百分比也一样,width: 50% 继承下来是计算后的具体像素值,不是百分比。

从一道题,走向一组知识

把知识连起来

层叠与选择器

CSS 自定义属性默认会继承吗?和普通属性有什么不一样?

自定义属性默认全部可继承,unset 对它们始终等于 inherit,和普通属性的判断逻辑不同。

层叠与选择器

当同时存在带 !important 和不带 !important 的规则时,默认的层叠优先级顺序是什么?

关键字设置的值也参与层叠,inherit 声明和 !important 结合时优先级取决于来源,不取决于关键字本身。

参考资料

  • inherit CSS keyword

示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。

本题目录
  1. 先记住这个答案
  2. initial 为什么不等于浏览器默认样式
  3. 可继承和不可继承属性上的差异
  4. 容易答错的地方
  5. 面试官还会怎么问
  6. 把知识连起来
读懂,再试着讲出来

先看核心答案,再读代码。最后展开追问,检查自己有没有遗漏边界。

试着回答追问
浏览全部面试题理解原理,也关注真实的使用场景。回到顶部 ↑