I am revising this question because I have found newer and more recent articles and links.
In short, there should be no reason to stop using non-nested names. In fact, it can even help both in terms of performance and in terms of service.
BEM (and other similar naming schemes) solves the problem of maintainability.
And class-oriented styles help in productivity.
I also want to add a few more explanations why some of the reasons given in the other answers, or what I saw when they say otherwise, are not entirely applicable to argue with this case.
"This is not how CSS works."
It’s true that CSS has a nested relationship, naturally, as the name suggests, but this alone is not the reason why we should or should use it.
"Nested relationships are easier to maintain."
This is only "possible" depending on the style of the code. Say we have a stylesheet as shown below:
a { } .some-div a { } .more-div a { }
And we have a link somewhere in the template:
<div class="some-div ... <div ... <div class="some-other-div" ... <a href="...
Now, when we look at the link in the template, we see the a tag without classes. What styles does he have? Well, we have to go to the stylesheet and look for a , and there will be many, many a , and they can be nested arbitrarily deeply.
This is similar to magic numbers in other programming languages; the only difference is that instead of the constant number, we have tag names. A search for a single a is similar to a search 3 in the source code; we need to get most of the information out of context.
And there is no way to do a quick search for the css selector, because we don’t know which parent element of the ancestor tree is used in the stylesheet. It could be .some-div a or .some-div .some-other-div:last-child a .
Instead, if we classified the tag itself (for example, <a class="some-div-link-class some-other-class" ... ). This will be just one search.