What is the meaning of "cascading' in CSS?

CssTerminologyCss Cascade

Css Problem Overview


What's the exact meaning of the term "Cascading" in CSS? I am getting different views, so I ask here. An example would help.

Css Solutions


Solution 1 - Css

"Cascading" in this context means that because more than one stylesheet declaration could apply to a particular piece of HTML, there has to be a known way of determining which specific stylesheet rule applies to which piece of HTML.

The rule used is chosen by cascading down from the more general declarations to the specific rule required. The most specific declaration is chosen.

Solution 2 - Css

When I teach CSS, I always tell the students that "cascading style sheets" means something like "fighting style sheets".

One rule tells your H3 tag to be red, another rule tells it to be green -- the rules are contradicting each other, who will win!? Stylesheet deathmatch!

OK maybe that's a slight exaggeration, but it's far more amenable to non-code, non-programming people who are just starting out than any notion of a cascade, or inheritance.

I do of course make sure to tell them that it's not a problem for the style sheets to be fighting each other, that's the way the language was designed.

Solution 3 - Css

Håkon Wium Lie (CSS co-creator) defines "cascade" in his PHD-thesis on CSS as "The process of combining several style sheets and resolving conflicts between them" https://www.wiumlie.no/2006/phd/

Solution 4 - Css

You have to think of it from the outside in. If you have a rule that that is on the body tag it will "cascade" through every child tag. If you put a rule on any tag inside the body it will adopt that rule, and so on. So the rule cascades through all the content unless interrupted by a rule from an embedded tag.

Solution 5 - Css

One clarification that may help. If you include two stylesheets and there's a rule with the same specificity in each, the one included last wins. I.E. the last in the cascade has the most influence.

(This is just a variation on having the two rules in the same sheet - the last one wins if all other things are equal.)

Eg, given

body {
    background:blue;
}

body {
    background:green;
}

then the background will be green.

Solution 6 - Css

Every rule from style sheets participate in a 'war' that is similar to cascade. Cascade is a pretty rarely used word and that's why it's problematic to understand the 'C' in CSS.

What is a cascade?

Cascade word means waterfall. Not any waterfall. It's the one that has steps that consists of rocks. enter image description here

Now imagine that every step is representing a differently placed rule that can apply style to your HTML.

When the water falls from one rock to another 'downwards' then it's not possible to go back with water 'up'. Water has fallen and that's it.

Coming back to CSS world.

The simplified (there is more to that) order is:

  • 'STEP' 1. Web browser rules
  • 'STEP' 2. External rules (linked to external CSS file)
  • 'STEP' 3. Styles inside CSS file
  • 'STEP' 4. Inline attribute 'style'

'Cascade' algorithm chooses the 'step' that is the lowest as the most important. Because these are on the 'lowest' place of 'waterfall'. Whatever rule is below overrides what is above.

Let's say you have sample.html file.

Inside sample.html you have a link to external CSS file (step 2), where you put selector and a rule like below:

p
{
  color: red;
}

and in the same time in the head tag of sample.html, you put:

<style>
p
{
  color: blue;
}
</style>

According to 'cascade' the lowest step is step nr 3.

That's why your paragraph is 'blue' not 'red'.

Why bother using 'cascade' word in this case that represents waterfall with rocks? Because when the water falls it TAKES everything with itself down to the bottom.

Why does it matter?

Because if you put inside sample.html in external CSS file also:

p
{
  color: red;
  font-weight: bold;
}

You won't remove font-weight: bold; using:

<style>
p
{
  color: blue;
}
</style>

You will just change the color. Every other rule from 'steps' before are 'kept'. And that's the beauty in it.

Solution 7 - Css

You can treat the CSS processing as a waterfall contains several cascades. Here are those cascades from top to bottom in order: (The lower can override the same property in the higher.)

  1. user agent declarations
  2. user normal declarations
  3. author normal declarations
  4. author important declarations
  5. user important declarations

See more in the spec

The cascading is to pick the right value from multiple origins. But it's different from sorting. Only something not in order need we to sort. But in CSS these origins have fixed precedence. And thus the pseudo-code might look like the follows:

  1. initialize the value array;
  2. apply the values from 1st origin;
  3. apply the values from 2st origin, override if the value exists;
  4. ...
  5. apply the values from Nth origin, override if the values exists;

From the pseudo-code you can see it quite looks like a waterfall of several cascades.

Solution 8 - Css

Cascade and Specificity what you need to know:

  1. CSS declaration marked with !important have the highest priority.

  2. But only use !important as a last resource. It's better to use correct specificities- more maintainable code!

  3. Inline styles will always have priority over styles in external stylesheets.

  4. A selector that contains 1 ID is more specific than one with 1000 classes.

  5. A selector that contains 1 class is more specific that one with 1000 elements.

  6. The universal selector * has no specificity value(0,0,0)

  7. Rely more on specificity than on the order of selectors.

  8. But rely on order when using 3rd party stylesheets-always put your author stylesheet last.

Solution 9 - Css

In choosing what CSS styles to apply to an HTML element, specificity overrides generality according to a cascading set of rules that settle conflicts between styles:

  1. Without CSS, the HTML will be displayed according to the browser’s default styles.
  2. CSS tag selectors (matching the HTML tag) override browser defaults.
  3. CSS class selectors (with .) override tag references.
  4. CSS ID selectors (with #) override class references.
  5. Inline CSS coded into an HTML tag override ID, class, and tag CSS.
  6. Adding the !important value to a CSS style overrides everything else.
  7. If CSS selectors are identical, the browser combines their properties. If the resulting CSS properties conflict, the browser chooses the property value that appeared later or most recently in the code.

A CSS selector that matches a more specific combination of tags, classes, and/or IDs will take priority. Of the following examples, the first will take precedence over the second, regardless of their order of appearance in the CSS:

ol#identity li.firstname { color: red; }
#identity .firstname { color: blue; }

Solution 10 - Css

CSS stands for Cascading Style Sheet. By their very nature styles further down a cascading stylesheet override equivalent styles higher up (unless styles higher up are more specific). We can therefore set base styles at the beginning of a stylesheet, applicable to all versions of our design, and then override relevant sections with media queries further on in the document.

Solution 11 - Css

It is a process which is used to resolve the conflicts in style sheet specification.

That is primely the conflict resolution process done according to the precedence mention in CSS.

Solution 12 - Css

Cascading means pouring down in steps or adding in steps. Style sheets contains codes for styling a html element. And the manner in which the codes are written in style sheet is in the cascading fashion. Or simply, back to back codes in layers for each html element of a html page in style sheet make the cascading style sheet.

Solution 13 - Css

Cascading is an algorithm which assigns weight to each style rule. When several rules apply, the one with the greatest weight takes precedence.

Solution 14 - Css

When one or more styles are applied to the same element.CSS performs a set of rules called cascading which evaluates the strength of Specificity of the two applied styles and determines the winner i.e the style rule which has more weight wins.if the two rules have same weight then the rule applied last wins.

Solution 15 - Css

CSS doc    
p{font-size: 12pt;}
p{font-size: 14pt;}

<p>My Headline<p>

would render the p at 14pt font because it's "closer" to the actual element (external style sheets loading from top of file to bottom of file). If you use a linked style sheet and then include some CSS in the head of your document after linking to the external CSS doc, the "in head" declaration would win because it's even closer to the element defined. This is only true of equally weighted selectors. Check out http://www.stuffandnonsense.co.uk/archives/css_specificity_wars.html for a good description of the weight of a given selector.

All that said, you could consider 'inheritance' as part of the cascade as well - for all practical purposes. Things "cascade" down from containing elements.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionWonderingView Question on Stackoverflow
Solution 1 - CssseanyboyView Answer on Stackoverflow
Solution 2 - CssAmbroseChapelView Answer on Stackoverflow
Solution 3 - CssMads MobækView Answer on Stackoverflow
Solution 4 - Cssdaveross858View Answer on Stackoverflow
Solution 5 - CssnevsterView Answer on Stackoverflow
Solution 6 - CssMorfidonView Answer on Stackoverflow
Solution 7 - Csswang zhihaoView Answer on Stackoverflow
Solution 8 - CssRafiqView Answer on Stackoverflow
Solution 9 - CsstdvView Answer on Stackoverflow
Solution 10 - CssbehzadView Answer on Stackoverflow
Solution 11 - CssAnurag SalunkheView Answer on Stackoverflow
Solution 12 - CsssangramaView Answer on Stackoverflow
Solution 13 - CssantonjsView Answer on Stackoverflow
Solution 14 - Cssuser10015257View Answer on Stackoverflow
Solution 15 - CssWill MooreView Answer on Stackoverflow