По идеологии
БЭМ стоит по возможности отказываться от наследования в css (так как это медленно и опасно, скажем так). Т.е вместо
.block{}
.block .header{}
.block .content{}
Следует писать так
.block{}
.block_header{}
.block_content{}
Для верстки используем
compass основанный на
sass. Раньше БЭМ легко реализовывался через sass c помощью & (sass подставлял родительский селектор на место амперсанда):
.block
&_header
&_content
Преобразовывался в нужный нам
.block{}
.block_header{}
.block_content{}
Но начиная с версии sass 3.1.8 амперсанд подставляет родительский селектор, только в валидное выражение.
Deprecate parent selectors followed immediately by identifiers (e.g. &foo). This should never have worked, since it violates the rule of & only being usable where an element selector would.
Следствием этого является то, что, видя конструкцию &_header, sass ставит пробел после амперсанда и мы получаем на выходе нерабочее правило:
.block _header{}
Внимание вопрос: если кто сталкивался, было ли найдено решение, кроме как сидеть на старой версии sass, либо повторять все имена родительских селекторов вручную?