Ещё возник вопрос, что делать в следующей ситуации. Есть например блок 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