CSS 中的“revert”有什么作用?

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您旅程的每个阶段提供云产品。立即开始使用 200 美元的免费额度!

Miriam Suzanne 在 Mozilla 开发者视频 中对此进行了讲解。

CSS 中的 revert 值会将属性“重置”为其继承的值,但仅限于 UA 样式表。这一点至关重要,因为它不会将 <p> 重置为内联,例如,因为 <p> 是 UA 样式表中设置的块级元素。

因此,如果我们有以下 HTML

<p>Lorem, ipsum dolor.</p>
<p class="alt">Fugit, id vel.</p>

和 CSS

p {
  color: red;
}
.alt {
  color: revert;
}

两个段落都将被 p 选择器选中,使其变为红色,但第二个段落上的类选择器具有更高的特异性,因此 color: revert; 获胜,将文本更改回黑色(UA 默认值)。

但是,color 属性会级联,因此如果我们有

<div class="parent">
  <p>Lorem, ipsum dolor.</p>
  <p class="alt">Fugit, id vel.</p>
</div>
.parent {
  color: blue;
}
p {
  color: red;
}
.alt {
  color: revert;
}

第二个段落将是 蓝色,因为 revert 强制它从继承中获取其 color

revert 值是相当新的,Firefox 和 Safari 支持,但 Chrome 世界尚未支持。我们已经有一些相关的关键字可以作用于任何属性,旨在帮助控制继承和重置值。

区别很小,但很重要:unset允许继承,而initial不允许。

Miriam 认为 revert 实际上是最有用的,因为它“考虑了用户和用户代理样式”。

我并不反对。但是(我讨厌这么说)我确实认为我们需要第四个选项,一个具有 initial 的强制功能,但又具有 revert 的 UA 样式表尊重功能的选项。比如…

.button {
  all: default; /* Not real! */

  /* New styles starting from UA base */
}

这些关键字适用于任何属性,但我认为使用 all 最有说服力。这是一种清除元素上所有样式以从空白状态开始的方法。也就是说,这三个选项都不够好,无法满足这种用例。unsetrevert 值不够好,因为它们仍然允许继承,因此无法很好地清除样式。initial 值过于强大,因为它会清除您可能不期望的默认值,例如使 <div> 变为内联而不是块。