前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
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 all property unset revert
CSS层叠与选择器

all: unset 和 all: revert 有什么不同,重置后元素会变成什么样?

all 会重置除 direction、unicode-bidi 和自定义属性以外的所有属性。all: unset 让可继承的属性继承父元素,其余回到 CSS 初始值,连 display 都变成 inline;all: revert 只撤掉作者样式,退回浏览器默认样式,div 还是 block。

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

三个重置关键字退到哪里

  1. initial每个属性都回规范里的初始值,连 color、font 也不继承了
  2. unset可继承属性等于 inherit,其余等于 initial
  3. revert退回上一个来源,作者样式退到用户和浏览器默认样式

属性的初始值和浏览器默认样式是两回事。display 的初始值是 inline,div 显示成块是浏览器默认样式表给的,unset 会把它一起抹掉。

核心回答

先记住这个答案

all 是个简写属性,一次性给除 direction、unicode-bidi 以外的所有 CSS 属性设同一个值,自定义属性也不在它的范围里。它只接受几个全局关键字。all: unset 的规则是:可继承的属性,比如 color、font-size,改成继承父元素;不可继承的属性,比如 display、margin、border,回到规范里的初始值。all: revert 是把当前作者写的样式全部撤掉,退回浏览器默认样式。最直观的区别是 div 写 all: unset 会变成 inline,写 all: revert 还是 block。

  • all 不重置方向和自定义属性
  • unset:可继承的继承,不可继承的回初始值
  • revert:退回浏览器默认样式
  • all: unset 会重置 display

同一个元素用三个关键字

同一个父元素下放三个 h1,分别用三个关键字,差别一眼就能看出来。

unset、revert、initial 的效果HTML
<style>
  .parent { color: red; font-size: 14px; }
  .unset { all: unset; }   /* 红色 14px,display 变成 inline,没有加粗和外边距 */
  .revert { all: revert; } /* 红色,但字号、加粗、外边距回到浏览器给 h1 的默认值 */
  .initial { all: initial; } /* 不继承父元素:颜色回到默认的黑色,字号 16px,inline */
</style>

<div class="parent">
  <h1 class="unset">unset</h1>
  <h1 class="revert">revert</h1>
  <h1 class="initial">initial</h1>
</div>

.unset 的 color、font-size 可继承,所以跟着父元素变红、变成 14px;display、margin、font-weight 在 h1 上本来是浏览器默认样式表给的,现在回到初始值,于是变成行内、没外边距、不加粗。 .revert 撤掉的只是作者样式,浏览器默认样式表里 h1 的 display: block、font-size: 2em、font-weight: bold 都还在。颜色是红的,因为浏览器默认样式没给 h1 设颜色,color 本来就继承父元素。 .initial 连继承都不要了,color 回到初始值,一般就是黑色,font-size 回到 medium,也就是 16px。

初始值和浏览器默认样式不是一回事

很多人以为「重置」就是回到元素的默认样子,这里要分清两个概念。初始值是规范里每个属性自己的默认值,和元素无关,display 的初始值对所有元素都是 inline。浏览器默认样式是浏览器内置的一张样式表,给 div 写了 display: block,给 button 写了边框和背景。

unset 和 initial 退到的是初始值,会连浏览器默认样式一起抹掉。revert 退到的是浏览器默认样式,元素保留原本的样子。

revert-layer
用了 @layer 的项目还有 revert-layer,它只退回到上一个层叠层里的样式,不会一路退到浏览器默认。组件库里想「去掉本层的覆盖、用基础层的样式」时就用它。

实际项目里怎么用

最常见的场景是把原生 button 的样式清干净,做成一个看起来像链接的按钮。这时 all: unset 很顺手,但会一起清掉几样有用的东西:cursor 变回默认箭头,outline 回到初始值 none,键盘聚焦时看不到焦点框,display 变成 inline。所以 all: unset 后面要补上 cursor: pointer 和 :focus-visible 的焦点样式,否则会有可访问性问题。

另一个场景是嵌入第三方组件或 Web Components 时,用 all: initial 挡住外部页面继承进来的字体、颜色,让组件样式不受宿主页面影响。

回答前,多想一步

容易答错的地方

以为 all 会重置 CSS 变量
自定义属性不受 all 影响。父元素定义的 --color,子元素写了 all: unset 照样能用 var(--color) 读到。
以为 all: unset 能保留元素原本的样子
它会抹掉浏览器默认样式,div 变行内,ul 没了左侧缩进,button 没了边框和背景。想保留原生样子只去掉作者样式,用 revert。
以为 all 会改 direction
direction 和 unicode-bidi 被故意排除在外,因为文字方向往往由 HTML 的 dir 属性决定,重置它会把 RTL 页面的文字顺序搞乱。
试着用自己的话回答

面试官还会怎么问?

all: unset 和 all: initial 在实践中差在哪?

差在可继承属性上。unset 让字体、颜色继续从父元素继承,元素还能融入周围的文字;initial 把它们也回到初始值,文字会变成浏览器初始字体和黑色,嵌在深色背景里可能直接看不见。

all 写在样式表里,它自己的优先级怎么算?

all 就是一个普通声明,和其他声明一样参与层叠。写在它后面、或者选择器优先级更高的声明,会覆盖它展开出来的某个属性。所以常见写法是先写 all: unset,下面再补需要的属性。

用 all: revert 做样式隔离可靠吗?

只能隔离作者样式。用户样式表和浏览器默认样式还在,而且它挡不住继承进来的值。需要严格隔离时,用 Shadow DOM 更可靠。

从一道题,走向一组知识

把知识连起来

层叠与选择器

在 @media 里面写 @layer,层的优先级会变吗?

revert-layer 是 revert 的层叠层版本,只退回上一个 @layer,不会一路退到浏览器默认。

层叠与选择器

自定义属性能做过渡动画吗?需要什么条件?

all 不重置自定义属性,而用 @property 注册过的变量才有真正意义上的初始值。

参考资料

  • all - MDN
  • revert - MDN

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

本题目录
  1. 先记住这个答案
  2. 同一个元素用三个关键字
  3. 初始值和浏览器默认样式不是一回事
  4. 实际项目里怎么用
  5. 容易答错的地方
  6. 面试官还会怎么问
  7. 把知识连起来
读懂,再试着讲出来

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

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