Ещё возник вопрос, что делать в следующей ситуации. Есть например блок tile
.tile {
text-align: center;
}
и есть миксин getting-started
.getting-started {
text-align: left;
}
Так исторически сложилось, что миксин подключается раньше основных стилей, и выравнивание текста, соответственно, не то, которое мы бы хотели.
Сейчас мы делаем хак для getting-started:
.getting-started.tile {
text-align: left;
}
Но это слегка попахивает. Как разрулить эту ситуацию покрасивее?
Не уверен, что понял твой кейс, но:
1) Сюдя по названию класса микса, это больше тянет на модификатор для tile
2) Если стиль
.getting-startedнаходитсявышено тут речь больше про css, а не про БЭМ. Поэтому тут решить вопрос можно увеличением веса селекта, например как сделал ты.Я так понимаю, что вопрос заключается в том, есть ли возможность при сборке разруливать блоки по приоритетам?
Т.е. если у меня в одном месте конфликтуют стили двух абсолютно независимых блоков, могу ли я как-то разрулить на месте, какой из них попадёт в сборку последним (т.е. будет приоритетнее)?
Если вопрос в этом, то раньше такой возможности не было. Только если в зависимостях блока вроде
pageдобавлять эти блоки в нужной последовательности, что тоже есть хак, но уже на уровне сборки.Но я не смотрел внимательно на
enb-bemи последние изменения в нём, может быть что-то изменилось.@ogonkov Чтобы разрулить ситуацию покрасивее, лучше отказаться от микса в пользу модификатор для tile вроде
tile_context_getting-startedили близкого по смыслу.Если для сборки используется
ENBилиbem-tools, то задачу с порядком можно легко решать с помощьюdeps.js-файлов. В данном случае достаточно сказать, чтоgetting-startedзависит отtileкакmustDeps. Но я так понял, что топикстартер не использует наши инструменты для сборки?Мы не используем инструменты, только саму методологию.
Не хотелось бы делать это модификатором (так было сделано одно время), по той причине что это может быть использовано не только для блока
tile.tile-- это абстрактный блок, реализующий поведение плитки (тенюшки при наведении, высота, ширина и т. п.).getting-started-- промо-блок, который сейчас подмешивается в плитку, но по сути может быть и не плиткой, а блоком в сайдбаре, например.Тогда ответ один: миксовать ;-)
Если не используете enb/bem-tools — научите свой сборщик рулить зависимостями, чтобы он умел подключать миксованные блоки в правильном порядке.
Миксовать можно не только
.getting-started, но и модификации:.getting-started_in-tile