Войти с помощью github

Верстаю по методологии BEM, но получается сильно расширный блок. Использовать только элементы не получается, поэтому приходится разбивать блок на подблоки, зависимые части главного независимого блока . Поэтому хочу спросить, не противоречит ли такой код методологии?

.product
  .product__title
  .product__img
// первый служебный блок
  .product-properties
    .product-properties__img
    .product-properties__desc
// второй служебный блок
  .product-content
    .product-content__desc
    .product-content__price
    .product-content__date

Два вопроса:

  1. Очень интересует где я могу включить доп. опции для шаблонов, такие как закрытие одиночных элементов, аттрибуты без кавычек - читал тут https://ru.bem.info/platform/bem-xjst/8/api/ Использую bem express и я должен это делать в файле .enb/techs.js, (?) так как шаблоны подключаются там

    module.exports = {
     bemtree: require('enb-bemxjst/techs/bemtree'),
     bemhtml: require('enb-bemxjst/techs/bemhtml')
    }
    

    Можно какой-то элементарный пример?

  2. Как убрать стандартную обработку текста, например, мне иногда важно чтобы сохранялись переносы строк в тексте.

Пробую подключить bem-react-components в проект на основе bem-react-boilerplate. Добавляю уровень в .bemrc.js:

module.exports = {
  levels: {
    'node_modules/bem-react-components/blocks':  { scheme: 'nested', schemeOptions : 'react', naming : 'react' },
    'src/blocks': { scheme: 'nested', schemeOptions : 'react', naming : 'react' },
  },
  // ...
}

Делаю импорт:

import Button from 'b:Button';

При запуске dev-сервера в консоли вижу ошибку:

Failed to compile.
./node_modules/bem-react-components/blocks/Button/Button.js
Module parse failed: Unexpected token (61:12)
You may need an appropriate loader to handle this file type.
|         const { focused, hovered, pressed } = this.state;
|         return {
|             ...this.__base(...arguments),
|             disabled,
|             focused,

Строка 61 это именно ...this.__base(...arguments).

Насколько могу понять, требуется вручную ещё указать webpack, что файлы из node_modules/bem-react-components/blocks/ должны обрабатываться babel'ем? Как это сделать?

Пробовал добавлять в config-overrides.js, возникает ошибка, связанная с некорректной работой с windows-путями:

Module not found: Can't resolve './blocksAppApp.js' in 'D:\My\Project\Path\src'

Добавляю так:

  rules1.oneOf[1] = {
    test : babelLoader.test,
    include : babelLoader.include,
    use : [
      {
        loader : require.resolve('webpack-bem-loader'),
        options : {
          techs : ['js', 'css'],
        }
      },
      {
        loader : babelLoader.loader,
        options : Object.assign({}, babelLoader.options, {
          presets : [['es2015', {
            loose : true,
          }], 'react'],
          plugins : [
            'transform-object-rest-spread',
            ['bem-import', {
              'levels': [
                './node_modules/bem-react-components/blocks',
                './src/blocks',
              ]
            }],
          ],
        })
      }
    ]
  };

Ошибка выпадает в node_modules/webpack/lib/ModuleNotFoundError.js. Дальше пока не смотрю (на этом станке нет отладчика).

Как надо делать правильно.

Здравствуйте,

пытаюсь правильно сверстать компонент группы кнопок, использую flexbox. У компонента может быть 2 стиля - без зазора и с зазором между кнопками. Не понимаю, как правильно сделать через CSS зазоры между кнопками. Первое что пришло на ум, это использовать отрицательные маржины у группы и положительные паддинги у кнопок, но margin у блока группа кнопок менять нельзя (блок не должен влиять на своё "положение", есть ситуация когда маржин задаётся примиксованным элементом). Второе что приходит на ум - это маржин справа у каждой кнопки кроме последней и маржин снизу у всех кнопок. Минус такого решения - есть "лишний" отступ снизу или "лишний" отступ справа, если последняя кнопка перенеслась на новую строку при сжатии экрана. Третий вариант который я пробовал - это использовать CSS Grid, но в данном случае это вообще не вариант...

Помогите, пожалуйста, понять, как правильно сверстать такой блок.

При создании блока с примесями (mixins) в текущей версии i-bem (bem-core@4.2.1 из npm) приходится добавлять bemDom.Block в список примесей, чтобы нормально наследовался функционал блока (findChildBlock etc):

BEMDOM.declBlock('block', [bemDom.Block, Mixin], { /* props... */ });

Собрался было добавить кейс для чистых миксинов в declBlock, но вижу, что в текущей версии на github уже всё есть:

function (baseCls, entityName, base) { /* ... */ }
// ...
declBlock : function(blockName, base, props, staticProps) {
    // ...
    base = getEntityBase(Block, blockName, base);
    // ...
},

Правильно понимаю, что это недавний фикс и будет на npm в ближайшем минорном апдейте?

(Чёт' потратил кучу времени, чтобы понять, что происходит... %((( Это, собственно, было в продолжение того вопроса: Примешивание миксина к модификатору · Issue #1481 · bem-site/bem-forum-content-ru.)

Пытаюсь дополнить конфигурацию bem-react-boilerplate через config-overrides.js. Хочется:

1. Удобный синтаксис для стилей

Пытаюсь добавить обработчик SugarSS или хотя бы подключать stylus. Пока получается только добавить соотв. парсер для всех исходных .css, что не является годным вариантом -- хотелось бы, чтобы css обрабатывалось именно, как css, а остальные вкусности применялись для файлов с соотв. расширением (.sss, .styl).

Создаю объект для обработки .sss файлов по аналогии с оригинальным:

  let ssLoader = {
    test : /\.sss$/, // Вариант А: пытаемся применять к файлам `.sss`. Не работает вообще.
    // test : /\.css$/, // Вариант Б: применяем к css-файлам. Работает, но ломается на обычном css.
    use : [
      require.resolve('style-loader'),
      {
        loader : require.resolve('css-loader'),
        options : { importLoaders : 1 },
      },
      {
        loader : require.resolve('postcss-loader'),
        options : {
          ident : 'postcss_sss',
          parser : 'sugarss',
          plugins : // autoprefixer...
        },
      },
    ],
  };

Далее могу либо заменить исходный объект, либо попытаться добавить новый:

  // Replace default postcss with SugarSS
  config.module.rules[1].oneOf[2] = ssLoader;
  // Append SugarSS
  config.module.rules[1].oneOf.push(ssLoader);

Проблема в том, что оно работает только в "Варианте Б" -- только если указываю расширение .css для test, но в этом случае сыпятся ошибки, если встречается обычный css. Типа такого:

Failed to compile

./src/blocks/App/Logo/App-Logo.css
Module build failed: Syntax Error

(1:11) Unnecessary curly bracket

> 1 | .App-Logo {
    |           ^

Т.е., с одной стороны, понятно, что оно как-то работает. Но вот повесить на отдельное расширение не удаётся никак.

Такое ощущение, что есть ещё фильтрация по расширениям исходных файлов и задаваемое мной условие поиска .sss или .styl ничего не находит в отобранных файлах.

Как можно добавить своё собственный "кастомный" тип исходных файлов?

В шаблонах конфигов (node_modules/react-scripts/config/) тоже не вижу ничего подобного на список допустимых расширений. Как это делается? Что делаю не так?

2. Sourcemaps для babel

При отладке вижу только один уровень sourcemaps -- код до склейки вебпаком (уже обработанные babel'ем отдельные модули). Мой исходный код либо не передается от babel в webpack, либо не подхватывается там.

Пробовал (там же, в config-overrides.js):

  1. Добавлять опции devtool: 'source-map', sourceMaps: true (или 'inline') и retainLines: true для (for babelLoader.loader).

  2. Передавать sourceMaps: true для опций babel-плагина es2015.

  3. Использовать config = injectBabelPlugin('source-map-support', config).

(См. How to use sourcemaps? · Issue #1 · bem/bem-react-boilerplate.)

Возможно ли? Какова сигнатура передачи параметров?

В разделе Декларация блока / Клиентский JavaScript (i-bem.js) / Платформа / БЭМ ничего подходящего не увидел. Свои собственные попытки пока приводят к тому, что в создаваемом модуле модификатора блока отсутствуют добавляемые методы. Сейчас прообую лезть внутрь, смотреть, что происходит, пока хотелось бы убедиться, что не упустил ч.-ндь банального.

Как-то так:

// Примесь scrollableMixin:
modules.define('scrollableMixin', [ 'i-bem-dom' ], function(provide, BEMDOM) {
    provide(BEMDOM.declMixin({ /*...*/ ));
});
// Модификатор с примесью
modules.define('box', [ /*...*/ 'scrollableMixin', /*...*/ ], function(provide, /*...*/ ScrollableMixin, /*...*/ Box) {
    provide(Box.declMod({ modName : 'scrollable', modVal : true }, ScrollableMixin, { /*...*/ }));
});

UP: Вижу, что declMixin вообще не предполагает передачу @param {Function|Array[Function]} [base] base block + mixes. Как быть? Как-то inherit'ить перед delcMod нужные модули самостоятельно?

Немного не по теме, наверное.. Кто-то знает как в Express 4 включить поддержку форм с multipart/form-data? Уже использовал и formidable, и multer, но все равно стабильно получаю ответ:

InvalidContentTypeError: Could not parse content type header: multipart/form-data; boundary=----WebKitFormBoundaryE8eRwjA5gxuFzaTp at createError (/home/kndn/projects/bets/node_modules/error/typed.js:31:22) at anyBody (/home/kndn/projects/bets/node_modules/body/any.js:36:18) at Server.handler (/home/kndn/projects/bets/node_modules/tiny-lr/src/server.js:145:32) at tinylr (/home/kndn/projects/bets/node_modules/tiny-lr/src/index.js:45:9) at Layer.handle [as handle_request] (/home/kndn/projects/bets/node_modules/express/lib/router/layer.js:95:5) at trim_prefix (/home/kndn/projects/bets/node_modules/express/lib/router/index.js:317:13) at /home/kndn/projects/bets/node_modules/express/lib/router/index.js:284:7 at Function.process_params (/home/kndn/projects/bets/node_modules/express/lib/router/index.js:335:12) at next (/home/kndn/projects/bets/node_modules/express/lib/router/index.js:275:10) at SessionStrategy.strategy.pass (/home/kndn/projects/bets/node_modules/passport/lib/middleware/authenticate.js:325:9) at SessionStrategy.authenticate (/home/kndn/projects/bets/node_modules/passport/lib/strategies/session.js:71:10) at attempt (/home/kndn/projects/bets/node_modules/passport/lib/middleware/authenticate.js:348:16) at authenticate (/home/kndn/projects/bets/node_modules/passport/lib/middleware/authenticate.js:349:7) at Layer.handle [as handle_request] (/home/kndn/projects/bets/node_modules/express/lib/router/layer.js:95:5) at trim_prefix (/home/kndn/projects/bets/node_modules/express/lib/router/index.js:317:13) at /home/kndn/projects/bets/node_modules/express/lib/router/index.js:284:7

Куда копать? Что не так? С какого конкретно момента это происходит понять не могу..

Мы продолжаем серию митапов для новичков. На этот раз проводим интенсив на целый день!

Положительные отзывы о прошлой встрече и большое количество желающих натолкнули нас на мысль провести митап в новом для нас формате. Мы немного переживаем, что в рабочее время не все смогут принять участие, поэтому очень просим вас максимально оперативно зарегистрироваться, чтобы мы смогли понять, соберётся ли достаточное количество участников.

Как и на прошлом митапе начнем с самых азов и познакомим начинающих верстальщиков с идеями, которые стоят за БЭМ, а затем на практическом примере рассмотрим разработку проекта на React.js и bem-react-core.

Вас ждет детальный рассказ про основы БЭМ на реальных примерах, включая CSS и хорошие практики в написании HTML-разметки. Кроме того, мы обсудим, как организовать станок верстальщика, рассмотрим такую мощную концепцию, как уровни переопределения, а также сборку.

Дальше мы обсудим разработку проекта на React.js и научимся описывать React-компоненты в декларативном стиле. Для вас подготовлено плавное погружение в bem-react-core. Мы на практических примерах рассмотрим, какие преимущества получит ваш React-проект с использованием этой библиотеки.

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

План мероприятия:
12:00 — 12:30 — Знакомство и ваши вопросы
12:30 — 14:00 — Основы БЭМ
14:00 — 15:00 — Перерыв
15:00 — 18:00 — Знакомство с React.js и плавное погружение в bem-react-core
18:00 — 19:00 — Заключительная секция вопросов и ответов

Ноутбук приносить не обязательно. После встречи мы опубликуем все материалы, ссылки и видео.

Митапы по БЭМ, как всегда, бесплатны, но нужно зарегистрироваться заранее: количество мест ограничено.

По всем вопросам пишите по адресу: info@bem.info

Stay BEMed!

Привет! Итак:

  • на сайте все переходы по внутренним ссылкам сделал с аяксом, т.е. перехватываю клик на ссылке (блок link) и выполняю get-запрос на сервер с доп.параметром ajax=true. На сервере проверяю параметр и, если есть, отдаю страницу БЕЗ обвязки. То есть допустим есть шаблон с какой-то шапкой, менюшкой слева и контент справа, аяксом я получаю только нужный контент (без шапки, меню и тд) и вставляю HTML через bemDom.update
  • использую location для правильной навигации
  • на данном этапе все работает как нужно. Занялся touch-версией и возникла проблема - допустим есть страница desktop.pages/main-index и touch.pages/main-index. Имитируем заход с touch-устройства, отображается именно тач-версия, переходим по ссылке и получаем контент десктоп-версии, хотя нужно чтобы сгенерился тач. Если убрать загрузку ссылок по аякс, то все работает корректно. Какие есть идеи? Может сам подход неверный? Использую BEMExpress, если очень нужен код, то здесь - тык. Чтобы включить аякс-загрузку ссылок раскоментируйте 11-12 строку файла components/common.blocks/link.js

Здравствуйте,

Есть блок кнопки

<div class="btn"><i class="icon btn__icon"><i><span class="btn__text>Button Text</span></div>

У кнопки есть модификаторы размера: --sizeL, --sizeS (задают отступы между элементами btn__icon bth__text и общий padding) Также есть модификатор --iconRight (который переносит иконку направо через flex order: 2, div btn свёрстан с помощью flex соответственно)

Вопрос такой: я сейчас сверстал так, что модификаторы --sizeL, --sizeS задают правый маржин у элемента btn__icon (для --sizeL маржин больше чем для --sizeS). Теперь хочу прописать стили для --iconRight, в моём случае я должен отменить маржин справа у иконки и добавить маржин слева и он должен быть разным для --sizeL и --sizeS.

Выходит нехорошая ситуация - модификатор --iconRight "знает" про модификаторы --sizeL и --sizeS, не говоря про макароны в css. Как этого можно избежать? Спасибо!

Опубликовали скринкаст! https://www.youtube.com/watch?v=BuKeVrQmVKI&t Ведущий: Владимир Гриненко

  • Верстка макета с нуля по методологии БЭМ.
  • Основы методологии, главные принципы.
  • Перевод сверстанного макета на React.js.
  • Знакомство с bem-react-core.

Репозиторий проекта с материалами для БЭМапа.

Не получается (без танцев с бубнами) сделать lazyInit на элементе блока (в соотв. с Инициализация / Клиентский JavaScript (i-bem.js)... )

Хочется оживления по клику на кнопке внутри:

// …
    lazyInit : true,
    onInit : function() {
        this._events(Button).on('click', this.prototype.onIconClick);
        this.__base.apply(this, arguments);

    }
// …

В общем, в onInit без дополнительных упрашиваний даже не заглядывает.

Заглядывает (и сразу, конечно, инициализирует), если настойчиво искать конкретный элемент из уже живого родителя (напр., *.findChildElem(...)).

Или если в шаблоне указывать как-ндь так:

// …
addMix()({ block : 'i-bem' }),
// …

ЧДНТ? Это нормальное поведение?

(Что-то не вижу, куда подевалась секция с назначением тегов. %((( )

Встречайте обновленный bem.info! Мы изменили дизайн и улучшили навигацию. Пользуйтесь и пишите ваши отзывы и предложения!

Stay BEMed! bem info 2018-02-05 12-32-36

Всем привет. Для чего нужен режим replace если его функционал вроде как полностью реализован в режиме wrap? При этом wrap не делает зацикливание при замене узла на себя с обёрткой. В каких случаях нужно использовать replace а в каких wrap, что может такого replace чего не может сделать wrap и наоборот, исключая что wrap не уходит в бесконечный цикл как replace в остальном какие различия у них?

Пример.replace()(%7B%20block%3A%20%27link%27%2C%20content%3A%20%7B%7D%20%7D)%3B%0A%0Ablock(%27block2%27).wrap()(%7B%20block%3A%20%27link%27%2C%20content%3A%20%7B%7D%20%7D)%3B&bemjson=(%5B%0A%20%20%20%20%7B%20block%3A%20%27block1%27%20%7D%2C%0A%20%20%20%20%7B%20block%3A%20%27block2%27%7D%0A%5D)%3B%0A):

([
    { block: 'block1' },
    { block: 'block2' }
]);
block('block1').replace()({ block: 'link', content: {} });

block('block2').wrap()({ block: 'link', content: {} });
<div class="link">
    <div></div>
</div>
<div class="link">
    <div></div>
</div>

Всем привет.

В документации написано следующее:

JS-параметры. Если значение не falsy, то миксует i-bem и добавляет содержимое в JS-параметры.

bem. Указывает шаблонизатору, нужно ли добавлять классы и JS-параметры для самой БЭМ-сущности и её миксов.

Пример(%0A%20%20tag()(%27div%27)%2C%0A%20%20bem()(false)%2C%0A%20%20js()(%7Bkey%3A%20%27value%27%7D)%0A%2F%2F%20%20%20js()(true)%0A)%3B%0A&bemjson=(%5B%0A%20%20%7B%20block%3A%20%27link%27%2C%20content%3A%20%27content%27%2C%20cls%3A%20%27some-class%27%20%7D%2C%0A%20%20%7B%20tag%3A%20%27br%27%20%7D%2C%0A%20%20%7B%20block%3A%20%27link%27%2C%20content%3A%20%27content%27%20%7D%0A%5D)%3B%0A):

([
  { block: 'link', content: 'content', cls: 'some-class' },
  { tag: 'br' },
  { block: 'link', content: 'content' }
]);
block('link')(
  tag()('div'),
  bem()(false),
  js()({key: 'value'})
);
<div class="some-class i-bem">content</div>
<br>
<div>content</div>

Это баг? Почему cls так влияет на результат?

Наверное вывод должен быть 1 из:

// Судя по документации это должно быть правильным результатом
<div class="some-class">content</div>
<br>
<div>content</div>

или

<div class="some-class i-bem">content</div>
<br>
<div class="i-bem">content</div>

Добрый день. Кто скажет, это так задумано выводить такое юзеру, или это баг?

например тут: https://ru.bem.info/methodology/css/#%D0%9C%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80%D1%8B

я вижу: 1 2

вместо "человеческого" html и css. Очень сложно разбирать примеры из-за лишних тегов и символов.

Google Chrome Версия 64.0.3282.119 (Официальная сборка), (64 бит)

Привет! Мы долго экспериментировали с кастомными bem-components и теперь собираемся тестить их в связке со всем дизайнерским арсеналом.

Нужна ваша помощь в интеграции bem-custom-components (https://www.npmjs.com/package/bem-custom-components) в bem-design (https://github.com/bemdesign/bem-design). При попытке подкючить были проблемы со сборкой JS.

#bem-design

Есть элемент Report__Params:

<div class="Report__Params Report__Params_type_detailmove Report__Params_groupObjects i-bem"></div>

Для него есть ряд модификаторов, в частности, type:* и groupObjects:true. В Report__Params.deps.js записано так:

    shouldDeps : [

        // Расширения для модификаторов по типу отчётов...
        { mods : { type : [
            'detailmove',
            'milage',
            // ...
        ] } },

        // Группировка выводимых табличных данных по объектам
        { mod : 'groupObjects' },

        // ...

Предполагается, что type:* будет __base для groupObjects. Т.е., метод в js-технологии groupObjects ожидает, что this.__base.apply(this, arguments) вернёт данные, подготовленные в одном из js-модулей type:*.

Однако в одном (только одном!) случае происходит наоборот -- type наследует от groupObjects.

От чего это может зависеть? Как можно вообще влиять на последовательность накладывания модификаторов друг на друга?

   enb@1.5.1
   bem-core@4.2.1
   bem-components@6.0.1

Всем, привет! Мой вопрос затерялся в телеграмме, поэтому решил продублировать его и здесь. Умеет ли webpack-bem-loader резолвить bem-сущности из ts/tsx-файлов? Если ли у кого-нибудь наработки?

Экспериментируя, удалось запустить минимальный проект только в конфигурации ts+js.

https://github.com/schemelev/simple-bem-react-app/blob/master/src/index.tsx#L9

Привет! Нужна помощь c доработкой сборки для bem.design (https://github.com/bemdesign/bem-design). Нужно добавить дополнительный шаг, на котором будет браться собранный deps-бандл и ему в конец добавляться стили блока decorator (https://github.com/bemdesign/bem-themes/tree/master/common.blocks/decorator)

Привет, подскажите как должен выглядеть блок content() для реализации не что похожего:

Идея своего врапера, который добавляет в эелементы внутри свой класс типа
.Wrapper > content() => children.map.addClass('Wrapper-el)

те имеется блок <Wrapper>, и для всех компонентов внутри (тоже написанные на Бем) к их классам и модификаторам в конце добавить элемент от блока Wrapper.

Еще пример:

<Wrapper>
  <Button />
</Wrapper>

сгенерит, типа:

<div class='Wrapper'>
  <button class='Button Button-checked Wrapper-el' />
</div>

Желательно для react-bem-core.

Спасибо.

Привет, подскажите пожалуйста При подключении

import CheckBoxGroup from 'b:CheckBoxGroup';

консоль сразу рассказывает про варнинги

/~/bem-react-components/~/React/react.js
There are multiple modules with names that only differ in casing.
This can lead to unexpected behavior when compiling on a filesystem with other case-semantic.
Use equal casing. Compare these module identifiers:
* ..../node_modules/bem-react-components/node_modules/React/react.js
    Used by 1 module(s), i. e.
    ..../node_modules/webpack-bem-loader/index.js??ref--1-0!/..../node_modules/babel-loader/lib/index.js??ref--1-1!/.../node_modules/bem-react-components/blocks/CheckBoxGroup/CheckBoxGroup.js
* /..../node_modules/bem-react-components/node_modules/react/react.js
    Used by 5 module(s), i. e.
    ..../node_modules/bem-react-components/node_modules/bem-react-core/dist/BaseComponent.js

Как с этим жить? А так же не совсем понятно как вообще работать с компонентом, он отличается (по входным параметрам точно) при сравнении с офф докой

Можно показать пример корректной работы? Создать чекбоксы в виде кнопок. Спасибо p.s. не понятно как здесь вставлять метки

Здравствуйте,

создаём тему для WordPress по методологии БЭМ, начали с фреймворка настроек темы. У WordPress в админке подключаются собственные стили, которые написаны не по БЭМ и мы при вёрстке сталкиваемся с тем, что специфичность некоторых элементов (например input, checkbox) ниже чем в стилях WordPress (в котором, конечно же, используются теги вместо классов). Как правильней всего решить такую проблему? Использовать !important или миксовать такие элементы с тегом? Или есть какой-то более правильный вариант?

Статьи

Список статей на английском языке

Видео

RadioJS

Опубликовали новую статью по мотивам первого БЭМпа для новичков! Материал будет полезен всем, кто только начинает знакомство с БЭМ и версткой в целом.

Здравствуйте. Ситуация такая: есть блок меню, который на сайте повторяется 3 раза. В каждом случае меняются его элементы - ссылки.

https://jsfiddle.net/user150/egzgstqu/

Как правильно изменять элементы в подобных ситуациях?

Предположения:
можно ставить модификатор для блока и менять элементы контекстным селектором:

.nav-menu--main .nav-menu__link

Во 2 и 3 случае так и сделал.
В 1 случае решил сделать микс 2 элементов. Пробовал через модификатор блока, но показалось, что выходит слишком много каскада и высок риск выстрелить в ногу делаю что то не так.

При этом есть сомнения:

  1. во 2 случае есть модификатор nav-menu__link--active который становится зависимым от модификатора блока nav-menu--main. Такого ведь не должно быть?
  2. знаю, что микс 2 элементов возможен, но кажется, что смесь получилась слишком сложная:
<a class="nav-menu__link buy-panel__link icon icon--basket" href="#">

Можете подсказать: что верно, что нет и как правильно?

UPD: Опубликовали видео: https://www.youtube.com/watch?v=BuKeVrQmVKI&t Мы продолжаем серию встреч для новичков!

На этот раз Владимир Гриненко проведет мастер-класс, на котором:

  • Сверстает макет с нуля по БЭМ-методологии, попутно объясняя ее принципы.
  • Покажет на примере сверстанного макета, как перевести любой БЭМ-проект на React.

Вас ждет максимум практики и примеров!

Регистрация уже открыта: https://events.yandex.ru/events/bemup/02-february-2018/.

Stay BEMed!

Доброго времени суток. Возникли затруднения как правильно писать модификаторы. Есть код:

<nav class="headerMenu">
        <a href="#" class="headerMenu__link">
            <span class="headerMenu__button">
                <span class="headerMenu__burger"></span>
            </span>
            <span class="headerMenu__text">Пункт меню</span>
        </a>
</nav>

При клике на ссылку с классом :

headerMenu__link

У данной ссылки добавляется класс "-active".

После чего нужно применить стили к:

headerMenu__button

Что приводит к проблеме, и вопросу. Правильное решение или нет, и как правильно сделать.

Ниже приведен SCSS. Думаю что где-то делаю не правильно. Как будет правильно по БЭМ?

.-active {
    .headerMenu {
        &__button {
            background-color: rgb(91, 66, 219);
        }
        &__burger {
            background-color: rgb(91, 66, 219);
            &:before {
                top:0;
                transform: rotateZ(45deg);
            }
            &:after {
                bottom:0;
                transform: rotateZ(-45deg);
            }
        }
    }
}
.headerMenu {
   /* all scss */
}

можно ли каким то образом получить доступ к скомпилированному css отдельных компонентов библиотеки для использования в своем проекте?