Здравствуйте! Учусь верстать по БЭМ. С HTML и CSS я разобрался. Дошел до написания JS. И возник вопрос. Нужно ли писать какие-то специальные классы для Javascript селекторов? И если да, то зачем они? И как они должны выглядеть? Просто к уже существующим классам добавляется префикс "js"? Например, js-block__element?
Нет, какой-то необходимости в префиксе нет. Если используется фреймворк
i-bem.js
, то наличие у блока или элемента классаi-bem
уже,в принципе, косвенно указывает на то, что этот DOM-узел имеет реализацию в технологии JS. Технологии — это общепринятый термин, когда говорят о какой-то БЭМ-сущности. Каждая такая сущность может быть представлена несколькими технологиями и по идее нас не должно волновать, сколько их у этой сущности в каждый момент времени. Например, есть «поле для ввода» (блокinput
). Когда мы работаем над его разметкой, мы реализуем его в технологии HTML (или JSX, или XJST, или в любой другой, отвечающей за то, какое HTML-содержание будет в результате). Мы можем написать тесты для этой технологии, которые будут проверять только правильность наличия классов и атрибутов конкретно для этой технологии. Поэтому мышление в терминах «технологии», кхм…, удобно =) . Когда структура готова, можно приступить к стилизации этого компонента. Например, в технологии CSS. Динамика будет в технологии browser.js, серверная часть — в node.js. На выходе получаем такой «букет»:Если для каждой технологии добавлять префиксы, получится кошмар.