CSS Modules

Не является методологией, а является средством трансформации имен классов. Возможно использование любой методологии вместе с CSS Modules.

Суть заключается в том, что на этапе сборки проекта, исходные имена классов в селекторах как-то трансформируются и в собранном проекте получаются другие имена классов. То, как именно трансформируются классы, зависит от настроек проекта, но суть в том, чтобы одинаковые имена классов из разных файлов на выходе стали разными именами.

Допустим, есть файлы a.css и и b.css. В каждом есть селектор .title. В зависимости от настроек можно получить .a_title и .b_title — к исходному имени класса добавляется имя файла + подчеркивание, такой режим часто используется для разработки. Для готовой сборки можно настроить минификацию имен и получить селекторы .aypdw и .pecdq.

Таким образом, решается одна из 2 основных проблем изоляции CSS — изоляция селекторов, но необходимо контролировать вывод классов, если в разметке будет <h1 class='title'>, то работать стили не будут — имена отличаются. Поэтому, чаще всего CSS Modules используется в React-приложениях, в которых есть полный контроль за итоговой разметкой.

В CSSSR используется модифицированная версия БЭМ. Поэтому актуальны большинство правил из БЭМ.

Правила

  • Не используйте префикс с именем блока у элементов. CSS Modules сами по себе обеспечивают уникальность класса

    /* Недопустимо */
    .block { ... }
    .block__element { ... }  
    
    /* Правильно */
    .block { ... }
    .element { ... }
    
  • Используйте модификаторы, аналогичные модификаторам в БЭМ. Визуально понятно, что класс является модификатором, в отличие от модификатора без префикса

    /* Недопустимо */
    .block { ... }
    .disabled { ... }  
    
    /* Правильно */
    .block { ... }
    .block_disabled { ... }
    
  • Не используйте сomposes для управления состояниями (модификаторами). Идея composes в одном классе на элемент и состояние описывается целиком в классе. Это ухудшает удобство использования различных состояний, когда групп таких состояний несколько

    /* Недопустимо */
    .block { ... }
    .block_disabled {
      composes: block;
      /* дополнительные стили */
    }  
    /* <div class='block_disabled'> */
    
    /* Правильно */
    .block { ... }
    .block_disabled {
      /* дополнительные стили */
    }  
    /* <div class='block block_disabled'> */
    

results matching ""

    No results matching ""