Стилус: как создать переменную CSS с интерполяцией Mixin

#css #stylus

Вопрос:

Как может стилус смешивать интерполяцию для обеих сторон определения переменной, например:

 --MyVariable: MyVariable
 

В скомпилированном CSS --MyVariable должно оставаться имя переменной, тогда как вторая переменная должна быть числовым значением, вычисленным для этой переменной, определенной в другом месте.

У меня будет много таких пар переменной CSS и переменной стилуса. Теперь, хотя я мог бы просто вручную записать их в файл стилуса, я хотел бы иметь Миксин, который позволяет мне создавать их, записывая общую часть имен только один раз в качестве единственного аргумента Миксина, например:

 VariablePair(MyVariable-1) // --MyVariable-1: MyVariable-1
VariablePair(MyVariable-2) // --MyVariable-2: MyVariable-2
VariablePair(MyVariable-3) // --MyVariable-3: MyVariable-3
 

Я пытался:

 VariablePair(VariableName)
  --{VariableName}: VariableName

VariablePair(MyVariable)
 

Он не разбирался.

Я понял, что MyVariable » без '' » станет реальной ценностью, к которой нельзя будет привязать -- . Но добавление '' к нему as VariablePair('MyVariable') приведет к тому, что правая часть самого определения станет строкой вместо переменной стилуса для вычисления.

Я пробовал различные комбинации наличия/отсутствия скобок и '' и $ , а также конкатенаций, но ни одна из них, похоже, не работает. '--' VariableName ': ' VariableName (с/без скобок/ $ ) не работает, он либо не анализирует, либо анализирует, но без создания строки в скомпилированном CSS.

Есть ли решение этой проблемы?

Ответ №1:

unquote работает для этого:

 VariablePair(name, val)
  {unquote('--'   name)}: val

.selector
  VariablePair('fontcolor', red)
  color: var(--fontcolor)
 

выведет

 .selector {
  --fontcolor: #f00;
  color: var(--fontcolor);
}