CSS之inherit,initial,unset,revert 你真的了解吗??

4,319 阅读3分钟

这是我参与11月更文挑战的第28天,活动详情查看:2021最后一次更文挑战

背景

学习前端三个月了,准备刷刷面试题,总结总结,一天几道面试题,向大厂进军。

这期我们讲一下CSS全局关键字属性值。

inherit

inherit 这个关键字是继承的意思。从IE8开始支持。

inherit 是一个实用性和兼容性都非常好的CSS属性值,例如我们使用inherit 关键字充值输入框的内置字体。

  input,textarea{
      font-family:inherit;
  }

又比如:子元素设置height:inherit实现高度继承等。

我们来看看下面代码,具体实现下看看效果:

     <style>
            .content {
                position: relative;
                width: 100px;
                height: 100px;
                background-color: red;
                color: black;
                font-size: 20px;
                margin: 30px auto;
            }

            .test1 {
                position: absolute;
                width: inherit;
                height: inherit;
                background-color: inherit;
                color: #fff;
                left: 120px;
            }
    </style>

    <body>
            <div class="content">
                父DIV
                <div class="test1">子DIV</div>
            </div>
    </body>

效果如下:

image.png

initial

initial 是初始值关键字。可以把当前的CSS属性的计算值还原成CSS语法中的规定初始值。

我们来看个例子:主要修改font-Size

     <style>
            .content {
            position: relative;
            width: 200px;
            height: 200px;
            background-color: red;
            color: black;
            font-size: 50px;
            margin: 30px auto;
        }

        .test1 {
            position: absolute;
            width: 200px;
            height: 200px;
            background-color: inherit;
            color: #fff;
            //我们看这里,我们使用的是初始值
            font-size: initial;
            left: 220px;
        }
    </style>
    <body>
            <div class="content">
                父DIV
                <div class="test1">子DIV</div>
            </div>
    </body>

效果如下:

image.png

如果我们子div不设置font-size,默认会继承父div的font-size:50px。 当我们设置子div的font-size为initial后,字体大小使用的就是CSS规范中定义的初始值,这个初始值为medium,默认16px。

实际用途: 我们要充值某些CSS样式,但是又不知道默认初始值是什么的时候,我们可以设置initial

误区: 很多人可能有这样一个误区,把initial 关键字理解为浏览器设置元素的初始值。其实不是,一定要记住,initial代表的是CSS属性的初始值。

比如:实际开发中,我们一般会把 <ul> 元素或者 <ol> 元素默认的list-style-type样式重置。但是很有可能,我们在某些区域需要再次重新使用list-style-type样式(小圆点或者数字),这个时候有些开发者就会使用关键字initial进行还原,这个是不正确的。

ol{
  padding:initial;
  list-style-type:initial;
}

//设置上以后没有用,上面的css等同于下面的CSS
 ol{
     padding:0; //这里
     list-style-type:disc; //这里
 }
 
 //我们预想应该是这样的:
 
 ol{
     padding:0 0 0 40px;
     list-style-type:decimal;
 }

这种情况我们应该使用关键字 revert,而不是 initial

unset

unset 是不固定值关键字,特性如下:

  • 如果当前使用的CSS属性具有继承特性,等同于 inherit关键字
  • 如果当前使用的CSS属性没有继承特性,等同于 initial关键字

一般是配置 all来进行批量重置,才更具有意义。

具体使用场景:

例如: Chrome浏览器支持<dialog>元素,我们一般使用<dialog>元素实现语义更好弹窗组件。但是我们又不想使用<dialog>内置的样式。 样式很多,我们不可能一个一个去重置,这个时候 all:unset就派上用场了,可以进行批量重置。

   dialog{
       all:unset;
       ... //自己设置自己需要的样式
   }

revert

revert 关键字可以让当前元素的样式还原成浏览器内置的样式。

我们来测试一下:我们给全局 <ol> 标签设置 list-style-type:none。然后我们在某一个局域区域又想使用它默认的样式小圆点。(测试来源于火狐浏览器)

    <style>
        ol {
            position: relative;
            color: black;
            width: 500px;
            font-size: 50px;
            margin: 30px auto;
            list-style-type: none;
        }

        .content {
            //局部区域恢复使用默认样式
            list-style-type: revert;
        }
    </style>

    <body>
        <ol>
            <li>测试1</li>
            <li>测试2</li>
            <li>测试3</li>
            <li>测试4</li>
        </ol>


        <div class="test2">
            <ol class="content">
                <li>测试1</li>
                <li>测试2</li>
                <li>测试3</li>
                <li>测试4</li>
            </ol>
            <div>
    </body>

image.png

结语

一步一步慢慢来,踏踏实实把活干!