When multiple rules target the same element, CSS uses three factors in order: origin → specificity → order.
Origin — inline styles beat stylesheet rules. !important overrides everything (avoid unless absolutely needed).
Specificity — a score calculated per selector. Higher score wins. The scoring (roughly):
· Inline style: 1000
· ID selector #id: 100
· Class, attribute, pseudo-class .class / [attr] / :hover: 10
· Element, pseudo-element div / ::before: 1
· Universal selector *: 0
Order — when specificity ties, the rule that appears last in the CSS wins.
Common gotcha: a class selector always beats element selectors no matter how many you chain. div div div (score 3) still loses to .box (score 10).