Reset CSS display property to default value

前端 未结 6 2108
粉色の甜心
粉色の甜心 2020-11-22 08:46

Is it possible to override the display property with its default value? For example if I have set it to none in one style, and I want to override it in a different with its

6条回答
  •  没有蜡笔的小新
    2020-11-22 09:21

    A browser's default styles are defined in its user agent stylesheet, the sources of which you can find here. Unfortunately, the Cascading and Inheritance level 3 spec does not appear to propose a way to reset a style property to its browser default. However there are plans to reintroduce a keyword for this in Cascading and Inheritance level 4 — the working group simply hasn't settled on a name for this keyword yet (the link currently says revert, but it is not final). Information about browser support for revert can be found on caniuse.com.

    While the level 3 spec does introduce an initial keyword, setting a property to its initial value resets it to its default value as defined by CSS, not as defined by the browser. The initial value of display is inline; this is specified here. The initial keyword refers to that value, not the browser default. The spec itself makes this note under the all property:

    For example, if an author specifies all: initial on an element it will block all inheritance and reset all properties, as if no rules appeared in the author, user, or user-agent levels of the cascade.

    This can be useful for the root element of a "widget" included in a page, which does not wish to inherit the styles of the outer page. Note, however, that any "default" style applied to that element (such as, e.g. display: block from the UA style sheet on block elements such as

    ) will also be blown away.

    So I guess the only way right now using pure CSS is to look up the browser default value and set it manually to that:

    div.foo { display: inline-block; }
    div.foo.bar { display: block; }
    

    (An alternative to the above would be div.foo:not(.bar) { display: inline-block; }, but that involves modifying the original selector rather than an override.)

提交回复
热议问题