Задать вопрос

Правильно ли я понял основые принципы БЭМа?

Проверьте, правильно ли я понял принципы БЭМа. Вот, например, имею следующего вида header
h_1410371816_2107957_d0aecfbcd0.jpg
В хедере располагается три других блока: logo, menu и info. Вот как я рассуждаю - являются ли данные блоки элементами для блока header? Нет, не являются, т.к. "Элемент – это часть блока, отвечающая за отдельную функцию. Он может находиться только в составе блока и не имеет смысла в отрыве от него." (с оффсайта БЭМа). Любой из этих элементов мы может вынести из блока header (например, расположить меню в сайдбаре справа от контента). Соответственно, мы даем им обычные, не составные имена классов.
А вот уже каждый пункт меню - является элементом для блока меню и его класс я именую: menu__item. Если мне нужно сделать особый стиль для активного пункта меню, добавляется класс-модификатор: menu__item_curren_yes.
А как быть в случае, в меню есть подменю, т.е.
<ul class="menu">
	<li class="menu__item">Пункт</li>
	<li class="menu__item">Пункт</li>
	<li class="menu__item">Пункт с подменю
		<ul class="???">
			<li class="???">Пункт подменю</li>
			<li class="???">Пункт подменю</li>
			<li class="???">Пункт подменю</li>
		</ul>
	</li>
	<li class="menu__item">Пункт</li>
</ul>
Если стиль пунктов подменю аналогичен стилю пунктов основного меню, логично (в стандартной верстке) задать li тот же класс menu__item. Предположим, пункты подменю должны быть несколько сдвинуты вправо. Тогда, задаем ul класс, например, submenu, в стилях этого класса указываем необходимую величину отступа. А как в этом случае правильно поступить с точки зрения концепции БЭМ? Ведь как я понял, в случае верстки по БЭМу, у каждого блока/элемента страницы должен быть свой уникальный класс.
  • Вопрос задан
  • 4055 просмотров
Подписаться 7 Оценить Комментировать
Решения вопроса 1
Zoxon
@Zoxon
Веб-разработчик
Уж незнаю что вы хотите сделать, но вот такой разметки хватит на что угодно.
И БЭМ это не способ именования классов. Нужно смотреть еще css, скорее всего именно там самые серьезные ошибки.
<ul class="menu">
	<li class="menu__item"><a href="#">Пункт</a></li>
	<li class="menu__item menu__item_active"><a href="#">Пункт</a></li>
	<li class="menu__item menu__item_submenu">
		<a href="#">Пункт с подменю</a>
		<div class="menu__submenu">
			<ul class="submenu">
				<li class="submenu__item"><a href="#">Пункт подменю</a></li>
				<li class="submenu__item"><a href="#">Пункт подменю</a></li>
				<li class="submenu__item submenu__item_active"><a href="#">Пункт подменю</a></li>
			</ul>
		</div>
	</li>
	<li class="menu__item">Пункт</li>
</ul>


В хедере располагается три других блока: logo, menu и info.

Я так понял вы подхватили болезнь БМ, новички всегда в это вляпываются
<div class="header">
	<div class="header__logo">
		<div class="logo"></div>
	</div>
	<div class="header__menu">
		<div class="menu"></div>
	</div>
	<div class="header__info">
		<div class="info"></div>
	</div>
</div>
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Там нет строгих жесткуих правил вне bem tools, это просто соглашение о подходе к именованию классов.
Вот еще можно почитать: habrahabr.ru/company/yandex/blog/234905
И правильней было бы задать вопрос на их основном форуме.

Так же вот вам для примера реальный проект сделанный на бэм с испольхованием bem tools
https://github.com/alexbaumgertner/hunter-boat
Ответ написан
Комментировать
OlegCherr
@OlegCherr
Запрограммлю всё что угодно (Web/Android)
Что касается именования классов, то я бы сделал так:
<ul class="l-menu">
  <li class="l-menu-item">Пункт</li>
  <li class="l-menu-item l-menu-item_active">Пункт</li>
  <li class="l-menu-item l-menu-item_submenu">
    Пункт с подменю
    <ul class="l-menu-submenu">
      <li class="l-menu-subitem">Пункт подменю</li>
      <li class="l-menu-subitem">Пункт подменю</li>
      <li class="l-menu-subitem l-subitem_active">Пункт подменю</li>
    </ul>
  </li>
  <li class="l-menu-item">Пункт</li>
</ul>

Вообще, не нужно бояться дорабатывать методологии "под себя". Удобство разработки и поддержки – вещь в значительной степени субъективная.
Лично я использую свой доработанный бэм-подход и он мне очень нравится.
Ответ написан
Комментировать
gatilin222
@gatilin222
Frontend-разработчик
На нашем блоге есть статья - КБЭМ - Контейнер, Блок, Элемент, Модификатор. Довольно подробненько описано)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы