Introduction
If you've ever written CSS and wondered, "Why isn't this style applying?" or "Why does this element look different from what I expected?" --- you're not alone. These are the most common frustrations for beginners (and even experienced developers).
The answer almost always comes down to three fundamental mechanisms of CSS:
-
Cascading (层叠)
-
Inheritance (继承)
-
Conflict Resolution / Specificity (冲突/优先级)
Once you understand these three concepts, you'll be able to debug 90% of your CSS issues without pulling your hair out.
1. Cascading --- "Everything Adds Up"
What It Means
Cascading means that a single HTML element can be selected by multiple selectors at the same time , and all of their styles will apply to that element.
A Simple Example
html
html
<p id="myP" class="cp
css
css
p { color: red; } /* Tag selector */
#myP { background: yellow; } /* ID selector */
.cp { font-size: 20px; } /* Class selector */
Result: The paragraph will have:
-
Red text (from tag selector)
-
Yellow background (from ID selector)
-
20px font size (from class selector)
All three styles "cascade" onto the element. That's cascading in action.
Why This Matters
In real projects, styles are often spread across multiple CSS files --- one for layout, one for typography, one for theme colors, etc. It's not always obvious which selectors are targeting a given element.
That's why browser developer tools (F12) are essential:
-
Use the inspect arrow to click on any element
-
++The Styles panel shows you every selector that targets that element and all styles applied++
2. Inheritance --- "Passing Down Traits"
What It Means
Inheritance means that certain CSS properties applied to a parent element are automatically passed down to its children.
What Gets Inherited
| Inherited ✅ | Not Inherited ❌ |
|---|---|
color |
width / height |
font-size |
background (background image) |
font-family |
border |
text-align |
padding / margin |
line-height |
display |
The Rule of Thumb:
-
Styles that affect content (text, fonts, colors) → inherit
-
Styles that affect the box itself (size, background, border) → do NOT inherit
Example
css
css
div {
color: red; /* Affects content → children inherit */
font-size: 20px; /* Affects content → children inherit */
width: 200px; /* Affects the box → children DO NOT inherit */
height: 100px; /* Affects the box → children DO NOT inherit */
}
html
html
<div>
<span>I'm a child element</span>
<!-- Inherits red text and 20px font size -->
<!-- Does NOT inherit width or height -->
</div>
How to Inspect Inheritance
In Chrome DevTools, select a child element and look at the Styles panel. You'll see a section labeled Inherited from parent --- this shows exactly which styles were passed down.
3. Conflict Resolution --- "Who Wins?"
What It Means
When multiple selectors target the same element and set the same property to different values , a conflict occurs. The browser needs a rule to decide which value wins.
The Priority Hierarchy (for basic selectors)
From highest to lowest priority:
text
ID Selector (#id)
> Class Selector (.class)
> Tag Selector (div, p, etc.)
> Universal Selector (*)
Example
css
css
p { color: blue; } /* Tag selector --- lowest priority */
.cp { color: green; } /* Class selector --- medium priority */
#myP { color: red; } /* ID selector --- highest priority */
With the same HTML:
html
html
<p id="myP" class="cp">What color am I?</p>
Answer : Red. The ID selector has the highest priority and overrides the others.
How to Debug Conflicts
DevTools makes conflicts easy to spot:
-
In the Styles panel, any crossed-out property has been overridden by a higher-priority selector
-
You can see exactly which selector "won" and which ones lost
Pro Tip: Master the Browser DevTools
All three mechanisms --- Cascading, Inheritance, and Conflict Resolution --- can be directly inspected using your browser's developer tools.
Quick Workflow
-
Press F12 (or right-click → Inspect)
-
Click the inspect arrow (top-left corner)
-
Click on any element on the page
-
Look at the Styles panel on the right
You'll see:
-
All styles applied via cascading
-
Which styles are inherited (grouped under "Inherited from...")
-
Which styles are overridden (struck through)
-
The exact selector that "won" each conflict
This single tool will solve 90% of your CSS frustrations.
Summary
| Mechanism | One-Liner | Key Takeaway |
|---|---|---|
| Cascading | Multiple selectors, all styles apply | Everything adds up |
| Inheritance | Parent passes styles to children | Content styles flow down; box styles don't |
| Conflict | Same property, different values | Priority decides the winner: ID > Class > Tag |
Remember This:
Cascading is stacking. Inheritance is passing down. Conflict is about who has the highest authority.
Master these three, and you'll stop asking "Why isn't my CSS working?" --- and start confidently building and debugging stylesheets like a pro.