@polnyj0

Можно ли в LESS вызывать миксины используя переменную как часть имени миксина?

У меня есть три миксина .arsenal-logo(@width), .real-logo(@width), .milan-logo(@width). В перспективе их станет значительно больше. Я складываю имена команд в переменную (типа "массив") @team-name. И перебирая это "массив" пытаюсь вызвать .@{name}-logo(@width); Но компилятор (gulp-less) выдает ошибку. Неужели в LESS нельзя вызывать миксины используя переменную как часть имени миксина? Или все же эта задача решаема?

// ............................................................
// .for

.for(@i, @n) {.-each(@i)}
.for(@n)     when (isnumber(@n)) {.for(1, @n)}
.for(@i, @n) when not (@i = @n)  {
	.for((@i + (@n - @i) / abs(@n - @i)), @n);
}

// ............................................................
// .for-each

.for(@array)   when (default()) {.for-impl_(length(@array))}
.for-impl_(@i) when (@i > 1)    {.for-impl_((@i - 1))}
.for-impl_(@i) when (@i > 0)    {.-each(extract(@array, @i))}

.generate-logo-styles(@width, @bg-color: silver) {
	width: 30px;
	height: 30px;
	position: relative;
	background-color: @bg-color;

	@team-names: real, milan, arsenal;

	.for(@team-names); .-each(@name) {
		&.@{name}-logo {
			margin-left: @width;
			.@{name}-logo(@width); //ВОТ ЗДЕСЬ КОМПИЛЯТОР ВЫДАЕТ ОШИБКУ
		}
	}
}
.test {
.generate-logo-styles(200px);
}
  • Вопрос задан
  • 318 просмотров
Решения вопроса 1
isqua
@isqua
Научу HTML, CSS, JS, BEM и Git
Нет, нельзя. В репозитории LESS есть бурное обсуждение этого вопроса. Попробуйте решить задачу другими инструментами, например, PostCSS.

Но, если честно, я не понимаю, зачем генерировать миксин для каждой команды, почему нельзя сделать миксин, который, например, имя команды разворачивает в картинку, ведь логотипы, как я понимаю, будут отличаться только картинками?

.article-about-milan-logo {
    .team-logo(30px, "milan");
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
23 нояб. 2024, в 22:38
2500 руб./за проект
23 нояб. 2024, в 22:03
3000 руб./за проект
23 нояб. 2024, в 21:53
30000 руб./за проект