Specificity
Given the existence of inheritance, one might well wonder what happens in a circumstance such as this:
.grape {color: purple;} H1 {color: red;} <H1 CLASS="grape">Meerkat <EM>Central</EM></H1>
Since the selectors H1
and
.grape
can both match the H1
element shown, which one wins? As it happens,
.grape
is the correct answer, and so the
H1
element will be colored purple. This happens
because of the specificity of the two rules, and
the rules CSS has to deal with such situations.
Specificity describes the relative weights of
various rules. According to the specification, a simple selector
(e.g., H1
) has a specificity of 1, class selectors
have a specificity of 10, and ID selectors a specificity of 100. Thus
the following rules would have the noted specificity:
H1 {color: red;} /* specificity = 1 */ P EM {color: purple;} /* specificity = 2 */ .grape {color: purple;} /* specificity = 10 */ P.bright {color: yellow;} /* specificity = 11 */ P.bright EM.dark {color: brown;} /* specificity = 22 */ #id216 {color: blue;} /* specificity = 100 */
Thus, the rule for #id216
has a much higher
specificity, and therefore more weight, than any of the others
listed. In cases where more than one rule can apply to an element,
the styles with the higher weight win out.
Inheritance and Specificity
Within the framework of specificity, inherited values have, effectively, a specificity of 0. This means that any explicitly declared rule will override an inherited style. Therefore, no matter how much ...
Get Cascading Style Sheets: The Definitive Guide now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.