Войти с помощью github
Форум /

Стили блока могут влиять на вложенные в него блоки. Чтобы этого не происходило нужно сделать блок «неискажающим» (раньше мы его называли «абсолютно-независимый блок»).

Для этого надо выполнить два простых правила:

  1. Всем элементам внутри блока надо задать классы, т.е. не опираться в CSS на имена элементов
  2. Все классы, на которые накладываются стили этого блока, должны быть уникальными, например, начинаться с имени класса корневого элемента

Рассмотрим на примере:

<div class="b-services">
    <h2>Сервисы</h2>

    <ul>
        <li><a href="">Крибли</a></li>
        <li><a href="">Крабли</a></li>
        <li><a href="">Бумс</a></li>
    </ul>
</div>

Чтобы стили блока b-services никак не влияли на вложенные блоки, задаём всем элементам блока, на которые мы накладываем стили, уникальные имена классов начинающиеся с имени блока (b-services).

<div class="b-services">
    <h2 class="b-services__head">Сервисы</h2>

    <ul class="b-services__list">
        <li class="b-services__item"><a href="">Крибли</a></li>
        <li class="b-services__item"><a href="">Крабли</a></li>
        <li class="b-services__item"><a href="">Бумс</a></li>
    </ul>
</div>

__ используется для отделения имени блока от внутреннего класса. Если писать с одним дефисом (b-services-head), то непонятно это имя другого блока, или внутренний класc. Просто подчёркивание используется для отделения модификаторов от имени блока. Других символов, кроме - и _, по спецификации CSS использовать нельзя.

В качестве альтернативы префиксу из имени блока, можно использовать префикс из первых букв имени блока. В примере выше это будет bs__

<div class="b-services">
    <h2 class="bs__head">Сервисы</h2>

    <ul class="bs__list">
        <li class="bs__item"><a href="">Крибли</a></li>
        <li class="bs__item"><a href="">Крабли</a></li>
        <li class="bs__item"><a href="">Бумс</a></li>
    </ul>
</div>

Экономим байты, теряем в наглядности, потенциально теряем в уникальности. Ещё варианты?