Привет! Используем LESS. Тулзы БЭМ не используем, только именование классов. Нужно по модификатору блока переопределить стиль для нескольких его элементов. Можно ли не размножать название модификатора или имя блока?
.coolblock {
&__e1 { color:#000; }
&__e2 { color:#333; }
// так размножаем модификатор
&_red &__e1 { color:#600; }
&_red &__e2 { color:#A00; }
// а так размножаем имя блок
&_red {
.coolblock__e1 { color:#600; }
.coolblock__e2 { color:#A00; }
}
// а хочется чего-то примерно такого
// но это будет компайлиться в .coolblock_red__e2
&_red {
&__e1 {color:#600;}
&__e2 {color:#A00;}
}
}
Есть ли какой-нибудь финт на этот случай? Спасибо!
http://lesscss.org/features/#variables-feature Через интерполяцию переменной?
Ну про http://lesscss.org/features/#parent-selectors-feature знаете, наверное.
Спасибо! Про вариант с интерполяцией думал. Во-первых, чтобы использовать что-то кратко-бессмысленное типа "b", надо соблюдать правило "один блок на файл". Во-вторых, даже если так, получается не очень эстетично:
Пальцы переломаешь, пока наберешь все эти собачки и скобочки =(
Про parent selector знаю, мой сниппет из вопроса наполовину из него и состоит. Он позволяет без дублирования писать правила "блок - элементсмодификатором", но при необходимости сделать каскадное правило "блоксмодификатором - элемент", приходится повторяться.
Вот у Стилуса вроде планировалось нечто похожее на то, что мне нужно: https://github.com/stylus/stylus/issues/1240 - но тоже не совсем то.
У меня руки тянутся накидать препроцессор, который будет заменять # во вложенных правилах на корневой селектор. Тогда можно будет писать так:
- чтобы подсветка не отвалилась, а вероятность встретить настоящий ID, да еще и во вложенном правиле, да еще и начинающийся с "_" или "-" - минимальна. Однако, это будет очевидный велокостыль, поэтому пока ищу штатное решение.
нене:
Тогда стоит посмотреть в сторону PostCSS. ;-)
PostCSS - это прекрасно, но у нас процессинг на голом PHP. Поэтому вместо постпроцессора придумал костыль с форматтером для lessphp (который https://github.com/leafo/lessphp ). Ничего не умеет, решает одну единственную проблему - правила элемента внутри правил блока-с-модификатором. Хитрость в строчке
#__el {
Просто оставлю это здесь, на память =) Возможно, после некоторой эксплуатации, напишу пост.Я одно время тоже задавался этим вопросом... Но пришёл к следующей структуре
такой код намного читабельней для меня.
И для себя выявил следующее правило написания кода.