学习总结,如有错漏,敬请指摘,共同学习!
参考文章:【译】理解CSS关键字:“Initial”,“Inherit”和“Unset”
其他参考链接不再单独列出,可以在文中所有可访问链接中找到
PS:文章中的标题仅仅是对内容的概括,正文部分是按照上面的参考文章进行梳理的
初始值
首先看一下参考文章中这句话:
每个 CSS 属性都有一个初始值,这个值和 HTML 元素没有任何关系。 首先我们应该要知道,什么是初始值?看一下MDN中对初始值的解释:
初始值是默认值
按照定义,我们来探索一下,
定义中第一句话,
初始值是默认值,什么是默认值?
我们随便打开一个元素的概览来看看他的初始值是什么,这里打开background-color的概览,
可以看到,初始值(initial value):transparent,透明。
现在可知道的是,初始值是一个确定的值。
初始值的使用取决于属性是否被继承
然后分析第二句话,“初始值的使用取决于属性是否被继承”。
它这个初始值能否被使用,取决于属性是否是从父级祖级继承过来的。
但是这个初始值是否使用,跟是否继承有什么关系呢?
别急,我们接着往下看。
继承属性\非继承属性的初始值
再看第三句话
对于继承属性,初始值只能用于没有指定值的根元素上
这句话我一直不知道该怎么理解,
HTML的根元素是什么?根元素是<html></html>,
但是为什么只能作用在根元素上
没有指定值是什么意思?
后来在网上搜索,看到这样一句话
【因为不是根元素都会继承其他的父元素指定值】.
我的理解,先举个例子:
<html>
<body>
<div>
<p></p>
</div>
</body>
</html>
像color那些可以继承的属性,
在这串代码中,html为根元素,他没有父元素,也无从谈起继承,
同时我们编写代码时没有指定样式(比如没有规定color、border、background等样式)。
OK,此时我们再看第四句
对于非继承属性,初始值可以用于任意没有指定值的元素上
理解了什么是初始值、知道了什么是指定值,我们把这句话翻译成大白话就是:
对于不能继承的属性,比如border,只要这个元素没有设置border的值,css的初始值就会作用在上面。
回过头来看我在文章开头引用的参考文章里的那句话:
“每个 CSS 属性都有一个初始值,这个值和 HTML 元素没有任何关系。”
那和什么有关系呢?我认为就是规定,规定css初始值是什么就是什么,他只是一个值。
继承属性非继承属性仅仅是影响这个初始值什么时候起作用。
浏览器默认(User-Agent)样式表
当我们写一个纯html页面,没有写入css样式,如此css属性的初始值更不会起作用了
即使如此,浏览器展示页面的时候,也仍然会有一个初始样式(比如b/strong加粗、i/em倾斜、列表有列表符号等),这是怎么回事呢?
这就是浏览器默认样式表了。
每个浏览器都有一个自己的默认样式表。\
initial、inherit、unset、revert
这四个关键字,可以在任何属性中使用。 比如说position,除了广为人知的static、relative、absolute、fixed、sticky(这个是相较于最近的滚动祖先进行定位,需要的自行查找,这里不过多赘述)作为position的属性值,这四个关键字也可以作为它的属性值
另外多说一句
初始值:initial value
initial 也是CSS中的关键字 这个关键字的作用是:
将属性的初始(或默认)值应用于元素。
不应将初始值与浏览器样式表指定的值混淆。
它可以应用于任何CSS属性。
这包括CSS简写all,initial 可用于将所有CSS属性恢复到其初始状态。
简单来说就是,让元素应用CSS的初始值
inherit 继承
inherit关键字,意思就是继承,继承父元素、父元素没有相关属性就去一级一级向上查找,直到找到根元素依然没有找到可以继承的属性之后,就会用浏览器默认样式表,样式表中没有相关样式的书写,就会使用CSS初始值initial。(注意,这里是initial而非inherit继承) 举个例子,还用之前那个结构:
<html>
<body>
<div>
<p></p>
</div>
</body>
</html>
一个可继承属性,
如color,p元素没有指定color是什么颜色,于是div、body、html一级一级向上查找,找到html元素依然没有指定color,
那么就会去看浏览器默认样式中有没有指定p的color是什么颜色,
如果浏览器中也没有指定,那么渲染的时候就会指定css中,p的color为initial。即:
p{
color:initial;
}
// 这些都是我的理解,希望大家多方查证,互相探讨。
总结一下就是这样的顺序:
子元素 --> 父元素 --> 祖先元素 --> 根元素 --> 浏览器默认样式表 --> initial(CSS初始值)
initial 初始值
color的初始值(initial value)是“Varies from one browser to another”
译为中文是“从一种浏览器到另一种浏览器不同”,意思是跟随浏览器默认样式表。
background-color的初始值,文章刚开始确认初始值含义的时候就有截图,是“transparent”,透明的。
可能每个元素都有初始值(之所以说可能是因为我没有查证也没有验证)。
这个初始值我们之前也知道了,和浏览器没有关系,和浏览器默认样式也没有关系。
如果浏览器的默认样式表中设置background-color:white
background-color的初始值是background-color:transparent
得出结论:background-color:initial==background-color:transparent
知道这些就可以了。
unset 未设置
我们知道,CSS属性分为可继承和不可继承
可继承的属性,如color,对一个元素设置了,就会影响他的子孙后代。
不可继承的属性,如果设置了,只会对他自己有用。
unset更像是前面两个关键字的集合,综合,
对于可继承元素,unset==inherit;
对于不可继承的元素,unset==initial。
unset有什么用呢?
我们应该知道,CSS中出现一个属性,叫做all,
如果没有这个属性,unset的出现毫无意义(因为完全可以用initial/inherit代替)。
但是正因为有了这个属性,才显示出unset的强大:
(下图从参考文章中摘取,参考文章链接在此文顶部。)
Revert
(revert的汉译为恢复)
revert和unset相似,只不过对于非继承元素,unset==initial,而revert==浏览器默认样式
MDN没有汉译页面,英文页面中对revert进行了一个举例
例如,display 属性的初始值是 inline,浏览器默认样式表普遍将 <div> 的默认显示值设置为 block,<table> 的默认显示值设置为 table 。
浏览器兼容性
讲道理我不知道MDN中浏览器支持程度中的数字是什么意思,如果大家知道可以告诉我,谢谢~