Подобное расширение динамически формируемого селектора (в широком смысле этого слова) в настоящее время невозможно в Less. Существует открытый запрос функции для поддержки этого. Пока это не реализовано, вот два обходных решения.
Вариант 1:
Запишите содержимое селекторов .hello
и .hello-world
в отдельный файл Less (скажем, test.less
), скомпилируйте его, чтобы получить CSS. Создайте еще один файл для правил .foo
, импортируйте скомпилированный CSS как файл Less (используя директиву (less)
), а затем расширьте .hello-world
, как вы изначально планировали.
test.less:
.hello {
&-world {
color: red;
}
}
расширенное-rule.less:
@import (less) "test.css";
.foo {
&:extend(.hello-world);
font-size: 20px;
}
Скомпилированный CSS:
.hello-world,
.foo {
color: red;
}
.foo {
font-size: 20px;
}
Этот метод будет работать, потому что к моменту импорта файла test.css
селектор уже сформирован и больше не является динамическим. Недостатком является то, что ему нужен один дополнительный файл и создается зависимость.
Вариант 2:
Напишите фиктивный селектор с правилами для всех свойств, которые необходимо применить как к .hello-world
, так и к .foo
, и расширьте его следующим образом:
.dummy{
color: red;
}
.hello {
&-world:extend(.dummy) {};
}
.foo:extend(.dummy){
font-size: 20px;
}
Это создает один дополнительный селектор (фиктивный), но не имеет большого значения.
Примечание. Добавление моего комментария в качестве ответа, чтобы не оставлять вопрос без ответа, а также потому, что обходной путь, указанный в ветке, связанной с комментариями, не работает для меня как есть.
person
Harry
schedule
19.10.2014