Selectors
A tag selector (p) styles every element
of that type. A class selector (.highlight)
styles every element carrying class="highlight". An
id selector (#header) targets the one
single element with that id.
Example 1: combining selectors
p { font-family: sans-serif; }
.highlight { background: yellow; }
p.highlight { font-weight: bold; }
p.highlight (no space between them) only matches
paragraphs that also carry the highlight class — combining
selectors narrows what they match, while spacing them out
(p .highlight) would mean something different entirely: any
highlighted element inside a paragraph.
Example 2: what happens when two rules disagree
p { color: blue; }
.highlight { color: red; }
/* A ends up red — class beats tag selector */
When two rules target the same element with different values for the same property, CSS uses specificity to decide the winner: id selectors beat class selectors, which beat tag selectors. This is exactly why unexpected styling sometimes "just doesn't apply" — a more specific rule elsewhere is quietly winning, and learning to check specificity is often the fastest way to debug it.