-
Notifications
You must be signed in to change notification settings - Fork 2
Description
В поисках более чистого синтаксиса было решено отказаться от block(), elem(), mod() в пользу разделителей #8
Из плюсов
- более лучшая подсветка
- меньше кода
- больше ванильности css
Таким образом pobem становится не заменяющим, а дополняющим инструментом.
Пример нового синтаксиса
.block_mod {
_othetMod_val {
__elem {}
}
__elem {}
}
→ .block_mod.block_othetMod_val .block__elem {}
→ .block_mod .block__elem {}в сравнении со старым
Парсинг
Парсинг осуществляется на основе bem-нейминга с запоминанием контекста.
.block__elem_mod_val > h1 __elem2
// Ctx { block : 'block', elem : 'elem' }, { block : 'block', elem : 'elem2' }Реализация миксов
.block__elem1.__elem2 {}
→ .block__elem1.block__elem2 {}
.block._m_v._m2_v2.__e._m1 {}
→.block.block_m_v.block_m2_v2.block__e.block__e_m1 {} Модификаторы
Для модификаторов нет необходимости указывать . Достаточно разделять пробелами (первый модификатор не обязательно отделять пробелом)
.block _mod _mod2 {} → .block_mod.block_mod2
.block_mod _mod2 {} → .block_mod.block_mod2
.block_mod._mod2 {} → .block_mod.block_mod2// TODO
Но бывают кейсы, когда нужно утяжелить селектор. Для таких случаем можно указывать модификатор через точку.
Пока сомнительное решения для утяжеления. Кажется не явным
.block._mod _mod2 {} → .block.block_mod.block_mod2Поддержка входного и выходного нейминга (конвертер)
.block_mod_val
→.block--mod--val
.block--mod--val
→.block_mod_valПеренос конфигации из env в опции плагина
upd
Для трансформаций нейминга использовать https://github.com/tadatuta/bem-naming-transformations
upd
Возможно нужно сделать строгий режим через точку
.button_view_action __text {}
.button_view_action .__text {}Если исходить из правил bem - без точки всё ок, но нужно в голове постоянно держать что миксуется, а что нет.
При варианте с точкой - в голове достаточно держать только контекст.


