Lessons in this course (11)

4. Selectors, the cascade and specificity

Basic★ Must knowLesson 4 of 11
css
p { }                 /* type */
.card { }             /* class */
#main { }             /* id */
a:hover { }           /* pseudo-class */
p::first-line { }     /* pseudo-element */
nav > a { }           /* direct child */
h2 + p { }            /* adjacent sibling */
input[type="email"] { }   /* attribute */
.card:has(img) { }    /* parent selector (modern) */

Which rule wins? The cascade, in order:

  1. Origin and importance (!important beats normal; user-agent < author).
  2. Cascade layers (@layer) order.
  3. Specificity — (ids, classes/attributes/pseudo-classes, elements):
SelectorSpecificity
p0,0,1
.card p0,1,1
#main .card p1,1,1
inline style=""beats all selectors
  1. Source order — later wins when specificity is equal.

Inheritance: text properties (color, font-*, line-height) inherit; box properties (margin, border, width) don't.

Interview tip: Avoid !important and id selectors for styling — keep specificity low and flat (classes), so styles are easy to override.