> originally these approaches were designed exactly to deal with global nature of class names
Yes, that’s what I was referring to. It’s not actually a problem that CSS class names are “global” — they’re _meant_ to be.
A CSS class name is supposed to be applied to a “class of elements”, not just one of them. DOM elements are just as “global” as the class names.
If you want to style only one element, you can use an identifier to target it specifically.
But now people are using classes like they’d use identifiers. But they’d probably feel stupid writing identifier-based rules for all of their elements.
> sooner or later we will need to use the same class name under different scope
Yes, and you can “scope” classes by using more than one of them per element, so that you (generally) won’t have problems with this. For example, .field is different from .field.primary, which is different from .field.default
This way you can have rules that apply to all fields, and others that only apply to “primary” or “default” fields. This is how CSS is meant to be used.