Как правильно задать имена классов по методологии БЭМ для следующего кода:
<div class="wrapper">
<div class="container">
<header class="header">
<div class="header__logo"></div>
<div class="header__slogan"></div>
</header>
<section class="content">
<div class="content__bigTitle"></div>
<div class="content__inputArea">
<div class="content__inputArea__name">
<span>
<input id="name" type="text" class="content__inputArea__name__input"/>
</span>
</div>
</div>
<div class="content__sponsor">Sponsor
<div>
<span>
<input type="radio" name="sponsor" value="Yes" class="content__sponsor__yes">
<label for="yes">No</label>
</span>
<span>
<input type="radio" name="sponsor" value="No" class="content__sponsor__No">
<label for="no">Yes</label>
</span>
<span>
<input type="radio" name="sponsor" value="No" class="content__sponsor__Maybe">
<label for="maybe">MayBe</label>
</span>
</div>
</div>
<div class="content__Greek">Greek level
<div class="content__Greek__slider">
<span>Novice</span>
<span>Good</span>
<span>Expert</span>
</div>
</div>
</section>
<footer class="footer">
<div class="footer__date">
<label for="date">Date of hire</label>
<span>
<input id="date" type="text" class="footer__date__input">
</span>
</div>
</footer>
</div>
</div>
...или нужно делать иерархию бэм короче, например, inputArea__name
вместо content__inputArea__name
?
"content__inputArea__name__input"
Элемент — всегда часть блока, а не другого элемента. Это означает, что в названии элементов нельзя прописывать иерархию вида block__elem1__elem2.
Поскольку блоки можно вкладывать друг в друга, вы можете вместо иерархии создать новый блок, но "дробить" до мельчайших частиц не всегда нужно.(Без причины даже не рекомендуется.)
Здесь стоит определить будет/сможет ли данный блок использоваться дальше.
Так же элемент html может быть как элементом блока, так и самим блоком "header__logo logo".
Где классу logo вы задаете внешний вид, а через элемент header__logo позиционируете его. И дальше вложенную картинку(элемент) в этот блок вы можете назвать logo__img.
Вместо content__inputArea__name__input вы можете прописать class="content__inputArea field" и дальше инпуту уже "field__input-text".
Методология https://ru.bem.info/methodology/quick-start/ в ней описано, что есть элемент, а что блок и как правильно их именовать.
P.S. label связывается с input по id.
UPD.@CodeGust блок logo можно использовать дальше в любой части сайта. Суть блока в том, что его можно вставить в любое место и выглядеть он будет также. А header__logo нет, потому что элемент и он решает локальные задачи.Для примера, у меня на сайте есть карточка товара на 3 разных страницах. И расположены они в разных местах, но вид имеют один. Поэтому классы у этих карточек такие "catalog__item product-card", "related__item product-card", "new-products__item product-card". Где для product-card у меня прописаны стили внешнего вида, а вот через классы элементов я их позиционирую.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Чем можно заменить для IE с 9-11 версии? HTML нельзя менять. Есть modernizr только.
Делаю сайт, не могу понять, как сделать такую навигацию по сайту, может кто подскажет плагин какой-то?.
Есть html которые генерируется динамически. Есть body и у него realtive позиционирование.