【问题标题】:Output LESS variable name as string将 LESS 变量名输出为字符串
【发布时间】:2015-04-03 22:59:44
【问题描述】:

我正在尝试将变量名称引用为内容属性中的实际文本字符串,而不是变量的值。

对于上下文,我正在尝试为样式指南设置调色板。颜色被定义为变量,然后使用content 属性列出。 @rocketRed 可能编译为“#ff0048”,但我如何将@rocketRed 编译为“@rocketRed”?

如果这还不够,我试图通过 mixin 传递变量可能会更加复杂。否则它会破坏目的。

这是一个例子:

@rocketRed:#ff0048;

.mixin(@color) {
  &:before {content: "@color"};
  &:after {content: "@{color}"};
}

.test {
  .mixin(@rocketRed)
}

编译成

.test:before {
  content: "@color";
}
.test:after {
  content: "#ff0048";
}

:before 显然不起作用。我真正希望编译成的是:

content: "@rocketRed";

我想部分问题是变量自动编译。 @color -> @rocketRed -> #ff0048。不知何故,我只需要引用 @color 所引用的内容,然后通过将其转换为字符串将其停在那里。

这是我遇到的最接近的事情,它确实不太适用,但我想解决方案(如果可能的话)会有点相似:Use selector name as variable in LESS mixin

我意识到我可能在变量的工作方式上突破了一些界限,但有时突破界限会奏效!

【问题讨论】:

  • 考虑像.mixin(1 + 2); 这样的代码来猜测为什么你想要的只是不可能的。

标签: css less


【解决方案1】:

不,这根本不可能。如果你真的需要这样的东西,请反过来(即通过将字符串转换为相应的变量值),例如:

@rocketRed: #ff0048;

.mixin(@color) {
  color: @@color;                // variable value
  &:before {content: "@{color}"} // variable name
}

.usage {
    .mixin(rocketRed);
}

或者(如果您喜欢代码中的更多引号):

@rocketRed: #ff0048;

.mixin(@color) {
  color: @@color;            // variable value
  &:before {content: @color} // variable name
}

.usage {
    .mixin("rocketRed");
}

---

假设您出于某些调试/日志记录目的需要它,可以对其进行优化以仅使用一个伪元素:

@rocketRed: #ff0048;

.mixin(@color) {
    &:before {
        content: %("@%a: %a",
            @color, @@color);
    }
}

.usage {
    .mixin(rocketRed);
}

->css:

.usage:before {
  content: "@rocketRed: #ff0048";
}

【讨论】:

  • 完美!谢谢你的帮助。我总是忘记尝试颠倒我的逻辑。似乎很多时候,简单的策略都能找到解决办法。我遇到的下一个问题是将十六进制显示为内容,如果没有引号,我无法让 @@ 技巧起作用。虽然您将名称和值组合在一个伪元素中的建议对于我尝试做的事情并不完全有效(我希望它们分开,以便它们可以独立设置样式),但它似乎仍然为这个新问题提供了一个很好的解决方案。这是我使用它的方式/位置:codepen.io/chasebank/pen/ZYNyNY
  • > 如果没有引号,我无法使用 @@ 技巧。 - 这只是因为在 codepen 他们使用一些较旧的 Less 版本,其中 @@ 中的颜色关键字(例如 blue)被解释为原始颜色值(而不是实际标识符)因此 @@<raw-color-value> -> @undefined
  • 啊!有趣的是,我得再检查一下,看看还有什么新东西。感谢您提供的信息
猜你喜欢
  • 2015-06-19
  • 1970-01-01
  • 2011-08-27
  • 2010-12-04
  • 1970-01-01
  • 1970-01-01
  • 2015-10-25
  • 1970-01-01
相关资源
最近更新 更多