Отражать вложенность элементов в названии класса это частая ошибка в понимании методологии.
Правильнее придерживаться "аскетичности", точнее сказать, именно об этом и говорится в официальной документации.
Префиксы в методологии не используется (см. историю развития), но и не противоречат ей, если они решают вашу задачу значит им место.
Блок кроме элементов может содержать блоки и ничего не знает о своем расположении и внешних отступах, но знает о своих размерах и о своем внутреннем мире.
Расположение блока определяет другой блок или элемент (для них это будет знание о своем внутренним мире).
Все выше сказанное можно выразить в раскладке примерно так:
.page // определяет свой внутренний мир и расположение своих элементов
.page__header // определяем внутренние отступы
.logo // ничего не знает о своем положении оно определяется в page__header
.page__menu
.menu // вполне самостоятельная переиспользуемая сущность
.page__footer
.logo_small // модификация знания про размер
.menu_small // может иметь различные вариации (модификаторы)
Раскладка не более чем наглядный пример кратких выдержек из методологии. В зависимости от задачи, чувстве прекрасного и пр. тоже самое можно реализовать иначе.
Например элементы
page__footer
и
page__header
могут быть одним элементом
page__section
для которого реализованы модификации
page__section_header
и
page__section_footer
... хотя на этом возможности не заканчиваются, еще может быть так
page__section_type_header
и
page__section_type_footer
.
Эта методология всего лишь принципы, подобно SOLID, а не спецификация.