DEV Community

Cover image for Understanding CSS Specificity: Guide to Style Rule Importance
Eleftheria Batsou
Eleftheria Batsou

Posted on • Originally published at eleftheriabatsou.hashnode.dev on

Understanding CSS Specificity: Guide to Style Rule Importance

Hola, CSS enthusiasts!

Introduction πŸ™Œ

Ever wondered why your CSS styles sometimes don't apply as expected? You're about to unravel one of CSS's most enigmatic concepts: Specificity. Think of it as a game of chess where every selector you choose is a move that could change the outcome of how your webpage looks.

Here's what you'll learn in this article:

  • Understanding Specificity : What it is and why it's crucial for CSS styling.

  • How Specificity is Calculated : Breaking down the scoring system of selectors.

  • Practical Examples : Real-world scenarios where specificity comes into play.

  • Advanced Specificity Situations : Dealing with nested selectors and pseudo-elements.

  • Managing Specificity : Tips to keep your CSS clean and your layouts predictable.

By the end, you'll be the master of CSS rules.

What is CSS Specificity? πŸ€”

Specificity is the weight given to a CSS declaration based on the selector it uses. It's what determines which styles are applied when there are conflicting CSS rules. Think of it as a scoring system where each selector type contributes points, and the rule with the highest score wins.

The Hierarchy of Specificity πŸ“

Here's how specificity is calculated:

  1. Inline Styles : These are applied directly to an element via the style attribute. They are the most specific, scoring 1,0,0,0.

  2. IDs : An ID selector adds 0,1,0,0 to the score. They're very specific but less so than inline styles.

  3. Classes, Attributes, and Pseudo-Classes : Each of these adds 0,0,1,0 to the specificity score. This includes things like .classname, [attribute], :hover, etc.

  4. Elements and Pseudo-Elements : These are the least specific, adding 0,0,0,1. Examples are div, p, ::before, etc.

Examples of Specificity in Action πŸ‘©πŸ’»

Inline Style Dominance

<div style="color: red;">Red text, inline style</div>
Enter fullscreen mode Exit fullscreen mode
div {
    color: blue;
}
Enter fullscreen mode Exit fullscreen mode

Result: The text will be red. Inline styles trump all other selectors.

ID Overriding Class

<div id="unique" class="common">Am I red or blue?</div>
Enter fullscreen mode Exit fullscreen mode
#unique {
    color: red;
}
.common {
    color: blue;
}
Enter fullscreen mode Exit fullscreen mode

Result: The text will be red. ID selectors have higher specificity than classes.

Multiple Classes vs. Single Class

<div class="red blue">What color am I?</div>
Enter fullscreen mode Exit fullscreen mode
.red {
    color: red;
}
.red.blue {
    color: green;
}
Enter fullscreen mode Exit fullscreen mode

Result: The text will be green. Combining selectors increases specificity.

Specificity in Practice 🌟

  • Combining Selectors : You can combine selectors to increase specificity. For example, div#id.class would be more specific than just #id or .class.

  • Importance of Order : When specificity is equal, the last rule defined wins. This is known as the cascade.

  • !important : As a last resort, !important can override specificity, but it's best to use it sparingly as it can lead to maintenance issues.

Advanced Specificity Situations πŸ€“

Nested Selectors

<div id="container"> <p class="text">Nested Specificity</p></div>
Enter fullscreen mode Exit fullscreen mode
#container .text {
    color: purple;
}
p.text {
    color: green;
}

Enter fullscreen mode Exit fullscreen mode

Result: The text will be purple. The nested selector is more specific due to the chain of selectors.

Pseudo-Classes and Attributes

<input type="text" name="user" value="Name">
Enter fullscreen mode Exit fullscreen mode
input[name="user"] {
    background: yellow;
}
input[type="text"] {
    background: lightblue;
}

Enter fullscreen mode Exit fullscreen mode

Result: The input will have a yellow background because attribute selectors are considered at the same specificity level as classes.

Tips for Managing Specificity πŸ’‘

  • Use Classes : Classes are more maintainable than IDs for styling.

  • Avoid Over-Specificity : Don't overuse ID selectors for styling. They can make your CSS hard to override when needed.

  • Understand Inheritance : Some properties are inherited, which can affect how specificity works within nested elements.

  • Use Specificity to Your Advantage : Know when to increase specificity for important styles, but keep your CSS structure clean.

Conclusion

CSS Specificity dictates which styles will be applied when there's a conflict. By understanding and mastering specificity, you can craft CSS that behaves exactly as you intend, creating efficient and manageable stylesheets. Remember, specificity isn't just about making rules stick; it's about designing with foresight and flexibility.

Happy coding, and may your CSS always be as specific as you need it to be! 😊


πŸ‘‹ Hello, I'm Eleftheria, Community Manager, developer, public speaker, and content creator.

πŸ₯° If you liked this article, consider sharing it.

πŸ”— All links | X | LinkedIn

Top comments (2)

Collapse
 
swaraj_patil_2c434e350c4c profile image
Swaraj Patil

You have given the example of the specificity of the pseudo-class and attribute.
you said the input will have a yellow background. but I think you made a mistake in giving CSS property otherwise in the above case, the output is light blue, not yellow.


input[name="user"] {
background: yellow;
}
input[type="text"] {
background: lightblue;
}

Collapse
 
bobjames profile image
Bob James

Specificity πŸ™Œ when i first found out about specificity in css it changed everything πŸ‘πŸ‘πŸ’›