When two selectors have same style, then one with higher specificity wins. In case they have same specificity, the one which come later, wins.
Specificity rules
Generate a number of the form a-b-c-d (in a number system with a large base). The value of a, b, c and d will be calculated using these rules:
| a= | count 1 for css in style attribute (otherwise 0). When it is 1, then b=c=d=0 |
| b= | count the number of ID selectors |
| c= | count the number of class selectors, attributes selectors, and pseudo-classes |
| d= | count the number of element names and pseudo-elements in the selector |
Few points to note:
- Universal selector can be ignored.
- Repeated occurrances of the same simple selector are allowed and do increase specificity.
Specificity examples
* {} /* a=0 b=0 c=0 d=0 -> specificity = 0,0,0,0 */
li {} /* a=0 b=0 c=0 d=1 -> specificity = 0,0,0,1 */
li::first-line {} /* a=0 b=0 c=0 d=2 -> specificity = 0,0,0,2 */
ul li {} /* a=0 b=0 c=0 d=2 -> specificity = 0,0,0,2 */
ul ol+li {} /* a=0 b=0 c=0 d=3 -> specificity = 0,0,0,3 */
h1 + *[rel=up]{} /* a=0 b=0 c=1 d=1 -> specificity = 0,0,1,1 */
ul ol li.red {} /* a=0 b=0 c=1 d=3 -> specificity = 0,0,1,3 */
li.red.level {} /* a=0 b=0 c=2 d=1 -> specificity = 0,0,2,1 */
#x34y {} /* a=0 b=1 c=0 d=0 -> specificity = 0,1,0,0 */
style="color:red" /* a=1 b=0 c=0 d=0 -> specificity = 1,0,0,0 */
Example css code
Specificity order in this example
attribute style > id > class > element
<style>
div {
width: 50px; height: 50px; background-color:orange;
}
.box {
background-color:lightgreen;
}
#id1 {
background-color:lightblue;
}
</style>
<div>
</div>
<div class="box">
</div>
<div id="id1" class="box">
</div>
<div style="background-color:lightgray" class="box">
</div>