LINUX.ORG.RU

БЭМ. Помогите уверовать

 


0

1

Кажется в последнее БЭМ стал трендом. Все чаще попадается на сайтах. Бегло пробежался по вакансиям, там тоже. До сих пор не понимаю зачем люди тащат этот уродливый стиль в свои проекты. Ну вот если нужны переиспользуемые блоки, кто не дает просто писать так:

.block {
  .elem1 {}
  .elem2 {}
  //...
}

Вот тут, например, приводятся аргументы:

Отсутствие пространства имён дает возможность совпадения селекторов и их неожиданных влияний (наложение правил, зависимость одних частей страницы от других).

Кто мешает писать селекторы так, чтобы они не совпадали?

CSS сложно понять без разметки, к которой он применен.

Зачем его вообще понимать без разметки то?

В CSS поощряется каскад, использование которого связывает стилизацию и разметку, что усложняет модификацию и того, и другого.

Обычный code smell. Просто не делай так, если есть другие варианты.

Наверное к уродливости имен классов со временем можно принюхаться и не замечать. Но главная проблема БЭМ, что запрет на использование вложенных элементов провоцирует огромную сложность в выборе имен классов. Народ в своей массе тупо переносит вложенность в имена классов, отчего те раздуваются еще больше.

// вот так
.nav-menu {}
.nav-menu__item {}
.nav-menu__item-icon {}
.nav-menu__item-title {}
.nav-menu__item-inner {}

// или так
.nav-menu {}
.nav-menu-item {}
.nav-menu-item__icon {}
.nav-menu-item__title {}
.nav-menu-item__inner {}

И как бы тут нет другого выхода, потому что у какого-нибудь «item icon» нет и никогда не будет никакого семантического названия (и это еще простой пример), а таких элементов на странице over 90%. Тогда чем БЭМ принципиально лучше простого

.nav-menu .item .icon {}
или даже
.nav-menu .item-icon {}
...

Про bemjson вообще молчу, он просто нечитаемый.


Ни semantic ui, ни bootstrap такой фигней как БЭМ (в том виде, как ты его описал) не страдают. Делай выводы.

KivApple ★★★★★
()

Это БЭМ

.nav-menu {}
.nav-menu__item {}
.nav-menu__item-icon {}
.nav-menu__item-title {}
.nav-menu__item-inner {}

а это уже не БЭМ

.nav-menu {}
.nav-menu-item {}
.nav-menu-item__icon {}
.nav-menu-item__title {}
.nav-menu-item__inner {}

Объяснить почему? :)

PS ни разу не верстак.

Noob_Linux ★★★★
()
Ответ на: комментарий от Noob_Linux

Второе не является самостоятельным блоком. Я пишу о том, что видел по разметке на разных сайтах. Да и вопрос не в этом, а в том почему народ этот БЭМ покупает? :)

emcode
() автор топика
Ответ на: комментарий от emcode

БЭМ покупают ибо нужны стандарты и единообразие верстки при разработке проектов что бы спокойно кидать людей туды сюды по необходимости. БЭМ как самая успешная из методологий и покупается. В своих пет проджектак конечно можно не использовать, но если работаешь в команде то БЭМ альтернатив то особых нет так что бы о них были в курсе большинство. Но это только о цсс методологий. БЭМ в своей сути это намного больше. Но сейчас если говорят БЭМ говорят в первую очередь о цсс методологии.

Noob_Linux ★★★★
()

БЭМ разрабатывался для того, чтобы разработку сделать максимально компонентной.

Прописывать руками все классы бэма утомительно, но если пользоваться всем стеком технологий то получаем возможность переиспользовать готовые компоненты путём копирования папок на файловой системе.

С bemjson и bemhtml разберись. Документации по БЭМу много но она довольно бестолковая. Для её понимания часто уже надо знать большую часть ответа.

Верить в БЭМ не надо, надо понимать зачем он нужен.

Кроме того БЭМ это не только о верстке, это универсальный подход к устранению рекурсии, при отсутствии вложенных компонентов одного типа. Для древовидных структур, где каждый уровень одинакового типа БЭМ не работает.

Jaberwock ★★★
()

... кто не дает просто писать так...

Тот, кто использует класс elem1 вне блока block.

k_andy ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.