loading...

CSS: Cascade and Specificity

koralarts profile image Karl Castillo Updated on ・3 min read

CSS 101 (7 Part Series)

1) CSS: Using Styles 2) CSS: Basic Selectors 3 ... 5 3) CSS: Box Model 4) CSS: Cascade and Specificity 5) CSS: Unit of Measurements 6) CSS: Color Values 7) CSS: currentColor Value

Two important and powerful aspects in CSS are cascade and specificity. So what are these two? Cascade and specificity are related and they both determine which style properties will be applied to certain elements.

Cascade

But aren't selectors supposed to determine which properties will be applied? That might be the case but what if multiple selectors are trying to apply the properties on the same element? Which one gets applied?

Here's an example:

h1 {
  color: blue;
}

h1 {
  color: red;
}

What will be the colour of the h1 if this was our stylesheet? Due to CSS Cascade, the h1 will be red. That wasn't too bad was it?

Let's say we have multiple stylesheets. Does the order we link them important?

/* style.css */
h1 {
  color: blue;
}

/* style1.css */
h1 {
  color: red;
}

/* style2.css */
h1 {
  color: green;
}

What will be the colour of the h1 if we link them in order?

<link rel="stylesheet" href="./style1.css" />
<link rel="stylesheet" href="./style2.css" />
<link rel="stylesheet" href="./style3.css" />

The h1 will be green because we're linking style3.css after all the other stylesheets. It's because the order your stylesheets matters. That's why you want to put vendor stylesheets before your own.

Why?

Simply put CSS is read from top to bottom later style properties are applied to the selected elements; hence the name Cascading Style Sheet.


Specificity

Now, cascading is somewhat accurate; because if different selectors attempts to apply the same property on the same element, there's a level of specificity that determines which property gets applied.

<h1 id="my-heading" class="red">What colour am I?</h1>
.red {
  color: red;
}

#my-heading {
  color: blue;
}

h1 {
  color: green;
}

We now have 3 selectors for the h1 with different colours. What will the colour be? The h1 would be green because the ID selector is more specific than the others.

So what determines the specificity of a selector? What if there's a lot of selectors?

CSS Specificity Diagram

This diagram above signifies that the properties for a more specific selector will be applied to the element.

Determining Specificity

One way to see which group selectors is overall more specific than another is counting how many individual selectors are in the group.

Let's compare these groups of selectors:

<ul id="nav-list">
  <li>
    <a id="current-link" class="current">Home</a>
  </li>
</ul>
#nav-list li a.current {
  color: blue;
}

#nav-list a.current {
  color: red;
}

#current-link {
  color: green;
}

The a will be blue because it has more selectors that are more specific. A way to visualize this is to count each selector type.

Attribute ID Class Element Total
Group 1 0 1 1 2 112
Group 2 0 1 1 1 111
Group 3 0 1 0 0 100

As you can see the first group of selectors have more selectors compared to the others.

Gotcha!

Just because one group of selectors have more selectors than others doesn't mean that group of selector will be used.

Attribute ID Class Element Total
color: green 0 1 0 0 100
color: pink 0 0 101 0 1010

As you can see, the link is coloured green as opposed to pink even if it has more selectors. The reason for this is that no matter how many less specific selectors you have, a more specific selector will have priority.


Now that we've talked about cascade and specificity, we can now move on to actually talking about different CSS properties!

CSS 101 (7 Part Series)

1) CSS: Using Styles 2) CSS: Basic Selectors 3 ... 5 3) CSS: Box Model 4) CSS: Cascade and Specificity 5) CSS: Unit of Measurements 6) CSS: Color Values 7) CSS: currentColor Value

Posted on Apr 12 by:

koralarts profile

Karl Castillo

@koralarts

Software Engineer for The Coalition Studio and a Mentor for Lighthouse Labs from Vancouver BC who loves The Golden Girls, Powerlifting and Movies!

Discussion

markdown guide