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

2 2 1 1

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

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

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 πŸ‘πŸ‘πŸ’›