Skip to content

v2 #10

@belozer

Description

@belozer

В поисках более чистого синтаксиса было решено отказаться от block(), elem(), mod() в пользу разделителей #8

Из плюсов

  • более лучшая подсветка
  • меньше кода
  • больше ванильности css

Таким образом pobem становится не заменяющим, а дополняющим инструментом.

Пример нового синтаксиса

.block_mod {
    _othetMod_val {
        __elem {}
    }
   __elem {}
}
→ .block_mod.block_othetMod_val .block__elem {}
→ .block_mod .block__elem {}

в сравнении со старым

image

Парсинг

Парсинг осуществляется на основе 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 {}

Т.к. без точки читается хуже
image

Чем сточкой
image

Если исходить из правил bem - без точки всё ок, но нужно в голове постоянно держать что миксуется, а что нет.

При варианте с точкой - в голове достаточно держать только контекст.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions