CSS Specificity
CSS Specificity
kanar
<html>
<head>
<style>
*{
color: gray;
}
#title{
color: red;
}
.h1{
color: blue;
}
h1{
color: pink;
}
</style>
</head>
<body>
<h1 id="title" class="h1"
style="color:purple">kaushal</h1>
</body>
</html>
Copy
Here the question is, what color will h1 be assigned to? This is
calculated based on the selector's components which we will
discussed in this tutorial.
Effect of Position
If there are two rules that have selectors of identical specificity,
the last one to be declared won. In an HTML page, you can add
styles in different ways: through a <link> tag, a <style> tag, or
directly in the element's style attribute. If you have
one <link> tag at the top of your page and another at the bottom,
the styles from the bottom one will be used. The same goes
for <style> tags; the ones lower down on the page take priority.
An inline style attribute with CSS declared in it will override all
other CSS, regardless of its position, unless a declaration has !
important defined.
If the browser doesn't support a property, it is ignored!
Specificity
CSS specificity determines which style rules get applied to an
element when there are conflicts. Higher specificity means the
style will be used. It's calculated based on a point system involving
inline styles, IDs, classes, and tag names.
Inline Styles
Inline styles have the highest specificity and will always override
styles if other selector(s) are also defined.
<html>
<head>
<style>
*{
color: gray;
}
#title{
color: red;
}
.h1{
color: blue;
}
h1{
color: pink;
}
</style>
</head>
<body>
<h1 id="title" class="h1"
style="color:purple">Kaushal</h1>
</body>
</html>
Copy
Here, you can see that the color: purple is applied to the h1 tag.
ID Selector
The ID selector also has high specificity but comes after the inline
Style specificity. So, if we have an ID and other selectors except
the inline style, then the element will take the ID selector
properties and values.
<head>
<style>
*{
color: gray;
}
#title{
color: red;
}
.h1{
color: blue;
}
h1{
color: pink;
}
</style>
</head>
<body>
<h1 id="title" class="h1">kaushal</h1>
</body>
</html>
Copy
Here, you can see the color: red is applied to the h1 tag.
Class and Attribute Selectors
<head>
<style>
*{
color: gray;
.h1{
color: pink;
}
</style>
</head>
<body>
<h1 class="h1">Kaushal</h1>
</body>
</html>
Copy
Element selectors like <p>, <div>, <a>, etc. have low specificity.
<head>
<style>
*{
color: gray;
}
h1{
color: tomato;
}
</style>
</head>
<body>
<h1 class="h1">Kaushal</h1>
</body>
</html>
Copy
<head>
<style>
*{
color: gray;
}
</style>
</head>
<body>
<h1 class="h1">Kaushal</h1>
</body>
</html>
Copy
Universal Selector: 0
Element selectors and pseudo-elements: 1
Class selectors, attribute selectors, and pseudo-classes: 10
ID selectors: 100
Inline styles: 1000
Copy
Here, the specificity value will be 111 because ID has a specificity
of 100, the class has a specificity of 10, and the h1 element has a
specificity of 1.
In the case of a specificity tie, the rule that appears last in the CSS
is applied.
Importance
The !important flag in CSS is used to give a particular style rule
the highest level of importance, overriding any other competing
styles. When you add !important to a CSS rule, it will take
precedence over other rules affecting the same element,
regardless of their specificity. For example, if you have:
p {
color: red !important;
}
p {
color: blue;
}
Copy
The text in the <p> element will be red, not blue, because the !
important flag makes that rule more important.
an !important at the end of a CSS value gets a specificity score
of 10,000 points. This is the highest specificity that one
individual item can get.
However, it's generally best to use !important sparingly, as it can
make debugging and maintaining your stylesheets more
complicated. It can override styles in ways that are hard to trace,
leading to unexpected results.
Quick Quiz
What will be the specificity value of the following selector:
a.harryclass.rohan-class[href]:hover {
color: red;
}
Copy
Solution
To calculate the specificity value of the
selector a.harryclass.rohan-class[href]:hover, you can break
down its components: