Reputation: 1280
I thought that the initial
value would restore initially rendered styles (as applied by a browser's internal user-agent stylesheet).
Example:
div.inline {
display: inline;
}
div.initial {
display: initial;
}
I expected the div.inline
rule would display <div class="inline">
in inline mode, and the div.initial
rule would display <div class="initial">
using a div
's original display value of block
.
But when I explore this, <div class="initial">
displays inline. Am I wrong? Can anyone elaborate more on this?
Upvotes: 37
Views: 31736
Reputation: 6780
Summary: The most common use of the initial
value is to override inherited styles.
When you use an inherited property on an element, some of its descendants might be affected undesirably. To wipe out the unwanted style from those elements, use the initial
value.
p {
visibility: hidden;
}
em {
visibility: initial;
}
<p>
<span>This text is hidden.</span>
<em>I don't want this text to be hidden.</em>
<span>This text is hidden.</span>
</p>
Then what's the difference between visibility
and the display
property, which is discussed in the OP? The visibility
property can be inherited, but display
cannot:
On non-inherited properties, the property's initial
value may be unexpectedly different form the browser's default value. That means you need to know its initial
value before you use it. Nevertheless, the computed (final) value may be different form the initial
value:
p {
display: flex;
}
a {
display: initial;
}
<p>
<a href="#">Link</a>
</p>
That's why I personally prefer not to use the initial
value on non-inherited properties.
Upvotes: 2
Reputation: 201538
The initial
value (not attribute) denotes the initial value of the property, as defined in CSS specifications: “The ‘initial’ keyword represents the specified value that is designated as the property's initial value.” Thus, its meaning depends on the property, but not on anything else, e.g. not on the browser or on the element that the property is being applied to. So it does not mean browser default.
For example, for the display
property, initial
always means inline
, because that’s the designated initial value of the property. In the example case, the browser default is block
, since the element is div
.
Thus, the initial
value is of limited usefulness. Its main effect seems to be to confuse people, due to misunderstandings. A possible use case is for the color
property, since its initial value is browser-dependent (mostly black, as we know, but not necessarily). For it, initial
means browser default, since that’s how the property has been defined, A similar use case is for font-family
: by declaring font-family: initial
, you get browser’s default font (which may depend on browser settings).
The usefulness is further limited by lack of support on IE (even IE 10).
Upvotes: 66
Reputation: 219804
The initial CSS keyword applies the initial value of a property to an element. It is allowed on every CSS property and causes the element for which it is specified to use the initial value of the property.
/* give headers a green border */
h2 { border: medium solid green }
/* but make those in the sidebar use the value of the "color" property */
#sidebar h2 { border-color: initial; }
<p style="color:red">
this text is red
<em style="color:initial">
this text is in the initial color (e.g. black)
</em>
this is red again
</p>
Upvotes: 7