@warcevil

Как вы используете БЭМ?

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

Во-первых, только сейчас задумался, а зачем вообще нужны элементы, если их нельзя использовать отдельно от блока? Преимущество такого нейминга, что классы получаются независимы, но так ли нужна эта независимость если по правилам нельзя использовать отдельно от какого то класса элемент, но как раз таки его можно впихнуть в любое место.

Во-вторых, интересно насколько по вашему мнению маленькие сайты (уровня лендингов) нуждаются в использовании этой методологии? Я просмотрел все уроки на ютуб в поисках практической верстки малых проектов на "чистом" БЭМ и там пустота! К тому же наблюдая, как верстальщик штампует лендинг за 5 минут каскадом хочется забыть о БЭМ навсегда, потому что разработка с ним гораздо дольше.

Ну и в третьих интересно как вы именуете вообще классы на каком-нибудь лендинге, где есть сотня блоков и все они разные. Это нужно не меньше часа потратить же на придумывание названий. Верстальщики ведь креативный народ и требуют чтобы дизайн разнообразный был. Ну вот к примеру даже здесь. Там даже в шапке уже тысячи элементов.
  • Вопрос задан
  • 1025 просмотров
Решения вопроса 1
vawsan
@vawsan
Frontend Developer
1. Потому что чаще используют все таки компоненты(блоки), а не элементы, А вот в составе блока уже элементы. То есть вы делаете кнопку блоком - то она может быть использована где угодно, она универсальная. Если же вы делаете кнопку в футере с анимашкой и фоткой Памеллы Андерсон, то она одна такая и может быть элементом футера, т.к. нигде более применятся не будет. А то, во что она будет вложена(может и сам футер) - блок.
2. Они нуждаются только в том случае, если вам/команде так удобнее работать. В целом, любая структурность всегда делает код более читаемым и простым. БЭМ это или другие договоренности - не важно.
3. Да из головы все берется. Если не хватает знаний - лезешь в переводчик и берешь самый коротки и понятный из вариантов.
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
ShadowOfCasper
@ShadowOfCasper
Middle User Interface Web Developer
Я вот так. А каждый как хочет, так и использует. По разделителям только вариантов море. По структуре тоже немало. Главное - сам смысл понимать:
1) Компоненты модуля сохраняют внешний вид при манипуляциях с разметкой в его пределах.
2) Стили позиционирования элементов и размещения отделены от стилей внешнего вида, которые лучше переносить вообще в отдельную папку и наследовать "тихим" классом (%) при наличии препроцессора.
3) Стили внешнего вида могут быть унаследованы любым компонентом любого модуля.
4) Элементы, по внешнему виду отличающиеся небольшим количеством параметров, должны наследоваться одним и тем же классом правил, но с разными модификаторами. Для этого, они и нужны.
4c0ec384e4cb49d9a4a4ee8c9a413cd3.png
Ответ написан
@sgrogov
Во-первых элементы нужны, если одних только стилей блока недостаточно. Если у вас возникает желание переиспользовать элемент блока в другом месте, значит этот элемент должен быть вынесен в отдельный блок. В идеале стили элемента имеют смысл только в контексте блока.
Во-вторых, БЭМ даёт преимущества в долгосрочной перспективе. Если вы сдадите лендинг и забудете навсегда - можно и поговнокодить, но обычно проекты (даже лендинги) некоторое время приходится поддерживать. С БЭМ не нужно каждый раз разбираться в забытом проекте и беспокоиться о том, что новые изменения могли где-то что-то сломать.
Что касается скорости разработки - используйте препроцессоры и шаблонизаторы, скорость только вырастет. Я успешно использую csssr-project-template, где связка BEM + stylus + jade мне кажется идеальной для вёрстки.
В третьих, как уже писали, используйте переводчик, если не получается придумать название. Что касается повторяющихся секций - да, нумеровать, если больше не за что зацепиться, это особенность вёрстки лендингов. Собственно и без БЭМ нумеровать придётся, если у каждой секции свои особенности.
Ответ написан
Комментировать
@Haoss
html-верстальщик
Ответ написан
Комментировать
@TwistedAndy
Чтобы понять есть ли смысл использовать БЭМ, нужно вспомнить, что этот стек технологий создавался для больших проектов с кучей страниц и кучей разработчиков. Он решает две основные проблемы:

1) Более-менее явная изоляция блоков. Это нужно в первую очередь для того, чтобы новички при написании новой функциональности ничего не сломали в существующем проекте;
2) Вносит единую схему именования классов.

В то же время БЭМ имеет свои минусы:
1) CSS код сильно разрастается, он становится избыточным из-за изоляции блоков;
2) С длинными именами классов сложно работать программистам, это ухудшает читаемость кода и увеличивает объем страницы.

Если команда небольшая, то можно вместо всего стека БЭМ использовать несколько ключевых принципов:
1) Страница разбивается на блоки. Стили для элементов блоков прописываются с указанием класса блока;
2) Общие стили выносятся в шаблонные селекторы с %.

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы