是否可以用默认值覆盖显示属性?例如,如果我在一种样式中将其设置为"无",并希望在不同的样式中使用其默认设置来覆盖它.
或者,找出该元素的缺省值,然后将其设置为缺省值是唯一的方法吗?我不想知道元素是否通常是挡路,内联或任何.
是否可以用默认值覆盖显示属性?例如,如果我在一种样式中将其设置为"无",并希望在不同的样式中使用其默认设置来覆盖它.
或者,找出该元素的缺省值,然后将其设置为缺省值是唯一的方法吗?我不想知道元素是否通常是挡路,内联或任何.
浏览器的默认样式在其用户代理样式表中定义,您可以找到here个源代码.不幸的是,Cascading and Inheritance level 3 spec似乎没有提出将样式属性重置为其浏览器默认值的方法.然而,有计划在Cascading and Inheritance level 4中重新引入一个关键字-工作组只是还没有确定这个关键字的名称(链接目前显示为revert
,但还不是最终的).有关对revert
的浏览器支持的信息可以在caniuse.com上找到.
虽然级别3规范确实引入了initial
keyword,但是将属性设置为其initial value会将其重置为默认值as defined by CSS,not as defined by the browser.初始值display
是inline
;这是指定的here.关键字initial
是指该值,而不是浏览器默认值.规范本身在第all
property条下做了这样的注解:
例如,如果作者在元素上指定
all: initial
,它将挡路所有继承并重置所有属性,就像级联的作者、用户或用户代理级别中没有出现任何规则一样.这对于包含在页面中的"小部件"的根元素很有用,因为它不希望继承外部页面的样式.然而,请注意,应用于该元素的任何"默认"样式(例如,来自块元素(例如
<div>
)上UA样式表的display: block
)也将被吹走.
因此,我想现在使用纯CSS的唯一方法是查找浏览器默认值并手动将其设置为该值:
div.foo { display: inline-block; }
div.foo.bar { display: block; }
(以上选项的另一种 Select 是div.foo:not(.bar) { display: inline-block; }
,但这需要修改原始 Select 器,而不是覆盖.)