It’s not entirely CSS fault (actually, I think it’s not CSS fault at all, bat that’s just my opinion).
Cascading Style Sheets are designed so that you either avoid repeating classes/names/tags, or avoid repeating properties definitions. If you repeat both, you’re doing it wrong.
If browsers fully supported tag selectors and properties inheritance, you would probably cut duplicated stuff in CSS by 75%.