CSS特殊属性值inherit、initial和revert的使用

251 阅读3分钟

一、背景和意义

在CSS中,inherit、initial、revert是几个相对比较冷门的属性值,很多前端开发者几乎从没用过这几个属性值。但这几个属性值在某些特定场景下非常好用,可以写出更简洁、BUG更少的CSS代码。

inherit、initial和revert这几个特殊值可用于任意属性,用于控制层叠。本文接下来给出几个简单的应用示例。

二、应用示例

2.1 inherit应用示例

假设现在有一段这样的HTML代码:

<style>
  .welcome {
    color: #888;
  }
</style>
<div class="welcome">
  <h1>您好,欢迎来到...</h1>
  <a class="more" href="/more.html">查看更多</a>
</div>

其运行效果为:

image.png

页面下方的链接是默认的蓝色,产品或者UI同事可能觉得不好看,想更换成跟上面标题统一的颜色,那么其中一个方法是给链接也加上color: #888属性:

<style>
  .welcome {
    color: #888;
  }
  .more {
    color: #888;
  }
</style>
<div class="welcome">
  <h1>您好,欢迎来到...</h1>
  <a class="more" href="/more.html">查看更多</a>
</div>

得到的结果为:

image.png

但CSS代码有两处color: #888,如果某天产品或者UI同事又想把色号#888改成#669或者其他色号,则需要改两个地方。当然,使用变量var可以解决要改多处的问题:

<style>
  :root {
    --main-color: #888;
  }
  .welcome {
    color: var(--main-color);
  }
  .more {
    color: var(--main-color);
  }
</style>
<div class="welcome">
  <h1>您好,欢迎来到...</h1>
  <a class="more" href="/more.html">查看更多</a>
</div>

但更简洁的方法是使用inherit,表示链接继承父元素的color: #888的属性:

<style>
  .welcome {
    color: #888;
  }
  .more {
    color: inherit;
  }
</style>
<div class="welcome">
  <h1>您好,欢迎来到...</h1>
  <a class="more" href="/more.html">查看更多</a>
</div>

其展示效果和上一个截图是一样的。

2.2 initial应用示例

每一个CSS属性都有初始(默认)值,如果将initial值赋给某个属性,那么就会将其重置为默认值,这种操作相当于硬复位该值。其中color属性的默认值为黑色,对应前面的例子,如果将color设置为initial:

<style>
  .welcome {
    color: #888;
  }
  .more {
    color: initial;
  }
</style>
<div class="welcome">
  <h1>您好,欢迎来到...</h1>
  <a class="more" href="/more.html">查看更多</a>
</div>

展示结果将是这样(注意,链接的颜色比上面的标题更黑):

image.png

2.3 revert应用示例

延续前面的例子,但是页面上的链接变多了:

<style>
  .welcome {
    color: #888;
  }
  .more {
    margin-top: 2rem;
    font-size: 0.8rem;
  }
</style>
<div class="welcome">
  <h1>您好,欢迎来到...</h1>
  <div><a href="/chapter1">查看第一章</a></div>
  <div><a href="/chapter2">查看第二章</a></div>
  <div><a href="/chapter3">查看第三章</a></div>

  <div class="more">
    <a href="/more.html">查看更多</a>
  </div>
</div>

展示效果为:

image.png

假设中间的三个链接计划要做成跟标题颜色一样,参考前面的例子可以加一个color: inherit属性:

<style>
  .welcome {
    color: #888;
  }
  .welcome a {
    color: inherit;
  }
  .more {
    margin-top: 2rem;
    font-size: 0.8rem;
  }
</style>
<div class="welcome">
  <h1>您好,欢迎来到...</h1>
  <div><a href="/chapter1">查看第一章</a></div>
  <div><a href="/chapter2">查看第二章</a></div>
  <div><a href="/chapter3">查看第三章</a></div>

  <div class="more">
    <a href="/more.html">查看更多</a>
  </div>
</div>

有可能按照需求文档,最底下的链接查看更多需要使用默认的蓝色。也许会有一些开发者想到加个color: rgb(0, 0, 255)属性,但实际上浏览器默认的蓝色链接产不是rgb(0, 0, 255),而是rgb(0, 0, 238)。应该有很多开发者也不想去记这个蓝色色号,这种情况下,就可以使用revert关键词将color设置为浏览器的默认值:

<style>
  .welcome {
    color: #888;
  }
  .welcome a {
    color: inherit;
  }
  .more {
    margin-top: 2rem;
    font-size: 0.8rem;
  }
  .more a {
    color: revert;
  }
</style>
<div class="welcome">
  <h1>您好,欢迎来到...</h1>
  <div><a href="/chapter1">查看第一章</a></div>
  <div><a href="/chapter2">查看第二章</a></div>
  <div><a href="/chapter3">查看第三章</a></div>

  <div class="more">
    <a href="/more.html">查看更多</a>
  </div>
</div>

运行结果为:

image.png