Элемент

Составная часть блока, которая не может использоваться в отрыве от него.

Особенности:

  • Название элемента характеризует смысл («что это?» — «пункт»: item, «текст»: text), а не состояние («какой, как выглядит?» — «красный»: red, «большой»: big).
  • Структура полного имени элемента соответствует схеме: имя-блока__имя-элемента. Имя элемента отделяется от имени блока двумя подчеркиваниями (__).

Пример

<!-- Блок 'search-form' --> 
  <form class="search-form"> 
  <!-- Элемент 'input' блока 'search-form' --> 
  <input class="search-form__input"> 
  <!-- Элемент 'button' блока 'search-form' --> 
  <button class="search-form__button">Найти</button> 
</form>

Принципы работы с элементами

  • Вложенность
  • Принадлежность
  • Необязательность

Вложенность

  • Элементы можно вкладывать друг в друга.
  • Допустима любая вложенность элементов.
  • Элемент — всегда часть блока, а не другого элемента. Это означает, что в названии элементов нельзя прописывать иерархию вида block__elem1__elem2.

Пример

<!-- Верно. Структура полного имени элементов соответствует схеме: 'имя-блока__имя-элемента' --> 
<form class="search-form"> 
  <div class="search-form__content"> 
    <input class="search-form__input"> 
    <button class="search-form__button">Найти</button> 
  </div> 
</form> 

<!-- Неверно. Структура полного имени элементов не соответствует схеме: 'имя-блока__имя-элемента' --> 
<form class="search-form"> 
  <div class="search-form__content"> 
    <!-- Рекомендуется: 'search-form__input' или 'search-form__content-input' --> 
    <input class="search-form__content__input"> 
    <!-- Рекомендуется: 'search-form__button' или 'search-form__content-button' --> 
    <button class="search-form__content__button">Найти</button> 
  </div> 
</form>

Имя блока задает пространство имен, которое гарантирует зависимость элементов от блока (block__elem).

Блок может иметь вложенную структуру элементов в DOM-дереве:

Пример

<div class="block"> 
  <div class="block__elem1"> 
    <div class="block__elem2"> 
      <div class="block__elem3"></div> 
    </div> 
  </div> 
</div>

Однако эта же структура блока в методологии БЭМ всегда будет представлена плоским списком элементов:

Пример

.block {} 
.block__elem1 {} 
.block__elem2 {} 
.block__elem3 {}

Это позволяет изменять DOM-структуру блока без внесения правок в коде каждого отдельного элемента:

Пример

<div class="block"> 
  <div class="block__elem1"> 
    <div class="block__elem2"></div> 
  </div> <div class="block__elem3"></div> 
</div>

Структура блока меняется, а правила для элементов и их названия остаются прежними.

Принадлежность

Элемент — всегда часть блока и не должен использоваться отдельно от него.

Пример

<!-- Верно. Элементы лежат внутри блока 'search-form' --> 
<!-- Блок 'search-form' --> 
<form class="search-form"> 
  <!-- Элемент 'input' блока 'search-form' --> 
  <input class="search-form__input"> 
  <!-- Элемент 'button' блока 'search-form' --> 
  <button class="search-form__button">Найти</button> 
</form> 

<!-- Неверно. Элементы лежат вне контекста блока 'search-form' --> 
<!-- Блок 'search-form' --> 
<form class="search-form"> </form> 

<!-- Элемент 'input' блока 'search-form' --> 
<input class="search-form__input"> 

<!-- Элемент 'button' блока 'search-form' --> 
<button class="search-form__button">Найти</button>

Необязательность

Элемент — необязательный компонент блока. Не у всех блоков должны быть элементы.

Пример

<!-- Блок 'search-form' --> 
<div class="search-form"> 
  <!-- Блок 'input' --> 
  <input class="input"> 
  <!-- Блок 'button' --> 
  <button class="button">Найти</button>
</div>

results matching ""

    No results matching ""