Я не знаю честно говоря как все таки лучше, на практике я столкнулся с такими вещами, сначала БЭМ мне навязал мнение, что каждой пукалке обязательно давать класс, ну я так жил, честно говоря мне это не особо нравилось, уже сложно было генерировать имена, так как порой и не приходит в голову как назвать класс. Затем я на бэкэ столкнулся с тем, что мне надо было в бд хранить текст, но при выводе его на страницу, он должен был быть стилизован, более того, нужно было создать форму отправки текста в бд. Как допустим эта форма, в которой я пишу на данный момент. Если приглядеться, то чуть выше есть кнопочки b, i, и т д. Так вот если их нажать, то текст обернет тегами без каких либо классов. Соответственно текст попадает в бд с тегами, но без классов. Из этого следует что ксс написан таким образом, что в основном классы даются главным блокам, а дети получают стиль от родителя. Что то типа .header > div{color:white} , .header>p{color:red} . Ну и т д. Мне так стало проще. Но и тут конечно есть минусы. Например у scss препроцессора есть наследования, @extend который принимает название класса. И не принимает такие цепочки от родителей. Но я не парюсь, пока без них обходился.