@wOneBvll

Как задать имя класса по БЭМ?

Спорю с заказчиком пол дня из за БЭМ
Ситуация такая: в блоке dashboard есть одинаковые списки, в которых одинаковые пункты(внешне)
Списки разные по смыслу, как и их пункты, также в разных списках могут изменять размер .img, цвет теста и тд
Мой вариант (посоветуйте как , как задать имена классов для картинки и текста)
<aside class="dashboard">
  ...
    <div class="dashboard__list dashboard__subscribers">
      <div class="dashboard__item">
        <div class="img"></div>
        <div class="name"></div>
      </div>

      <div class="dashboard__item">
        <div class="img"></div>
        <div class="name"></div>
      </div>
    </div>
  ...
    <div class="dashboard__list dashboard__subscribtions">
      <div class="dashboard__item">
        <div class="img"></div>
        <div class="title"></div>
        <div class="descriptions"></div>
      </div>

      <div class="dashboard__item">
        <div class="img"></div>
        <div class="title"></div>
        <div class="descriptions"></div>
      </div>
    </div>

</aside>

Вот так предлагает заказчик:
<aside class="dashb">

  <div class="dashb-subscriptions">
    <div class="dashb-subscriptions__item">
      <div class="dashb-item__title"></div>
      <div class="dashb-item__desc"></div>
    </div>
  </div>

  <div class="dashb-user-list">
    <div class="user-list__item">
      <div class="dashb-item__title"></div>
      <div class="dashb-item__desc"></div>
    </div>
  </div>

</aside>
  • Вопрос задан
  • 1004 просмотра
Решения вопроса 3
Get-Web
@Get-Web Куратор тега CSS
Front-End Developer
5ef525ad38f9f605115861.jpeg
Судя по макету тут как минимум 3 варианта. Если придерживаться вашей версии, что все в одном блоке dashboard, то будет примерно такая картина с модификатром (ключ_значение):

<div class="dashboard">
	<div class="dashboard__container">
		<div class="dashboard__header">
			Your channels
		</div>
		<div class="dashboard__btn btn">
			<div class="btn__ico"></div>
			<div class="btn__content">Create a chanell</div>
		</div>
		<div class="dashboard__list">
			<div class="dashboard__item dashboard__item_type_1">
				<div class="dashboard__pic dashboard__pic_size_smal">
					<img src="" alt="" class="dashboard__img">
				</div>
				<div class="dashboard__content">
					<div class="dashboard__title dashboard__title_size_small">lorem</div>
					<div class="dashboard__url">lorem</div>
				</div>
			</div>
			<div class="dashboard__item dashboard__item_type_small">
				<div class="dashboard__pic dashboard__pic_size_smal">
					<img src="" alt="" class="dashboard__img">
				</div>
				<div class="dashboard__content">
					<div class="dashboard__title dashboard__title_size_small">lorem</div>
					<div class="dashboard__url">lorem</div>
				</div>
			</div>
			<div class="dashboard__item dashboard__item_type_small">
				<div class="dashboard__pic dashboard__pic_size_smal">
					<img src="" alt="" class="dashboard__img">
				</div>
				<div class="dashboard__content">
					<div class="dashboard__title dashboard__title_size_small">lorem</div>
					<div class="dashboard__url">lorem</div>
				</div>
			</div>
		</div>
	</div>
	<div class="dashboard__container">
		<div class="dashboard__header">
			Subscriptions
		</div>
		<div class="dashboard__list">
			<div class="dashboard__item">
				<div class="dashboard__pic">
					<img src="" alt="" class="dashboard__img">
				</div>
				<div class="dashboard__content">
					<div class="dashboard__title">lorem</div>
					<div class="dashboard_desc">lorem</div>
				</div>
			</div>
			<div class="dashboard__item">
				<div class="dashboard__pic">
					<img src="" alt="" class="dashboard__img">
				</div>
				<div class="dashboard__content">
					<div class="dashboard__title">lorem</div>
					<div class="dashboard_desc">lorem</div>
				</div>
			</div>
			<div class="dashboard__item">
				<div class="dashboard__pic">
					<img src="" alt="" class="dashboard__img">
				</div>
				<div class="dashboard__content">
					<div class="dashboard__title">lorem</div>
					<div class="dashboard_desc">lorem</div>
				</div>
			</div>
		</div>
	</div>
</div>


Второй вариант это миксовать с родителем:
<div class="dashboard">
	<div class="dashboard__container subscribers">
		<div class="dashboard__header">
			Your channels
		</div>
		<div class="dashboard__btn btn">
			<div class="btn__ico"></div>
			<div class="btn__content">Create a chanell</div>
		</div>
		<div class="dashboard__list subscribers__list">
			<div class="dashboard__item subscribers__item">
				<div class="dashboard__pic subscribers__pic">
					<img src="" alt="" class="dashboard__img">
				</div>
				<div class="dashboard__content">
					<div class="dashboard__title subscribers__title">lorem</div>
					<div class="dashboard__url">lorem</div>
				</div>
			</div>
		</div>
	</div>
	<div class="dashboard__container subscribtions">
		<div class="dashboard__header">
			Subscriptions
		</div>
		<div class="dashboard__list">
			<div class="dashboard__item">
				<div class="dashboard__pic">
					<img src="" alt="" class="dashboard__img">
				</div>
				<div class="dashboard__content">
					<div class="dashboard__title">lorem</div>
					<div class="dashboard_desc">lorem</div>
				</div>
			</div>
			</div>
		</div>
	</div>
</div>


3-й вариант и порой самый уместный это не обращать внимание на то что блоки якобы похожи. Это разные блоки по своему назначению, а значит их смело можно делать разными и в разметке. Ведь если у них разное предназначение, значит возможны и значительные отличия в будущем:
<div class="dashboard">
	<div class="dashboard__subscribers subscribers">
		<div class="dashboard__header">
			Your channels
		</div>
		<div class="dashboard__btn btn">
			<div class="btn__ico"></div>
			<div class="btn__content">Create a chanell</div>
		</div>
		<div class="subscribers__list ">
			<div class="subscribers__item">
				<div class="ubscribers__pic">
					<img src="" alt="" class="subscribers__img">
				</div>
				<div class="subscribers__content">
					<div class="subscribers__title">lorem</div>
					<div class="subscribers__url">lorem</div>
				</div>
			</div>
		</div>
	</div>
	<div class="dashboard__subscribtions subscribtions">
		<div class="dashboard__header">
			Subscriptions
		</div>
		<div class="subscribtions__list">
			<div class="subscribtions__item">
				<div class="subscribtions__pic">
					<img src="" alt="" class="subscribtions__img">
				</div>
				<div class="subscribtions__content">
					<div class="subscribtions__title">lorem</div>
					<div class="subscribtions_desc">lorem</div>
				</div>
			</div>
			</div>
		</div>
	</div>
</div>

Каждый из этих вариантов можно еще доработать
Ответ написан
@quiplunar
Что это за фигня?

dashboard__list dashboard__subscribers

Элемент два раза элемент? Это не по BEM!

Ну что у вас что и у заказчика варианты ужасные!

Вот будет уже адекватно:

<aside class="aside">

  <div class="aside__wrap">
    <div class="aside__item">
      <div class="aside__item-title"></div>
      <div class="aside__item-desc"></div>
    </div>
  </div>

  <div class="aside__wrap">
    <div class="aside__item">
      <div class="aside__item-title"></div>
      <div class="aside__item-desc"></div>
    </div>
  </div>

</aside>
Ответ написан
wapster92
@wapster92 Куратор тега CSS
Первый вариант верен, но не совсем там есть элемент и он же другой элемент, более правильнее модификатор дать. И как это разные по смыслу? Это списки отображаются они одинаково, то что ты описали решается модификаторами. К тому же во втором варианте элементы одного блока вставлены в элементы другого так делать нельзя.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@soledar10
html css3 js jquery
Тогда лучше так (при условии, если эти классы еще не используются)
<div class="dashboard__title"></div>
<div class="dashboard__desc"></div>
<div class="dashboard__img"></div>
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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