【问题标题】:Short-hand hexadecimal value converted to full hexadecimal value, Less preprocessing简写十六进制值转换为完整十六进制值,减少预处理
【发布时间】:2015-11-04 22:28:49
【问题描述】:

我在使用诸如 Koala 和 Prepros(OSX 10.10.5,Yosemite)之类的 Less 预处理工具时遇到语法问题,其中我以简写十六进制定义的颜色值(例如 #fff、#000 等) ) 将在最终的 .css 文件中输出为 #fffffff#000000

这是我观察到的一个简单示例:

// In variables.less (css-preprocessed/variables.less)
@white: #fff;

// In styles.less (css-preprocessed/application/less/styles.less)
@import '../../variables.less';
.container {
    background-color: @white;
}

// In styles.css (css-preprocessed/application/css/styles.css)
.container {
    background-color: #ffffff;
}

请注意,这个问题是最近才出现的。我没有为这些各自的工具增加任何设置。每个都是开箱即用的。

【问题讨论】:

  • 扩展色码有问题吗?另外,仅供参考,有预定义的 CSS 颜色,例如 whitegreen
  • 完全没有,但它确实让我和我的团队担心发生了什么变化。如果有的话。我们之前的项目没有经历过这种观察和打印到 styles.css 中的简写十六进制值。
  • 扩展色码应该不是问题。

标签: less prepros


【解决方案1】:

这一直是旧版本的 Less 编译器中的行为。速记颜色值总是转换为速记十六进制值。这已作为 v 2.5.2 版本的一部分得到修复,如果提供为 one,则这些值现在将保持为简写形式。

来自Less Changelog

速记颜色将保持速记

所以,如果您将编译器升级到最新版本,那么这个问题应该会自动消失。

在最新版本中,以下 Less 代码:[Try it]

@white: #fff;
.container {
  background-color: @white;
}

将编译为

.container {
  background-color: #fff;
}

注意:如果您使用的是 Less 编译器的移植版本(例如 Less4j 或 LessPHP),那么您可能还需要检查他们的更改日志,以了解他们何时采用了这种行为(以及如果他们还没有这样做,请提出功能请求)。


在所有旧版本中,速记颜色会随时转换为速记形式

  • 颜色不是直接分配给属性,而是通过变量完成的。
  • 颜色变量的值是作为颜色本身而不是作为字符串提供的。也就是说,该值不包含在引号中(并且在打印时被转义)。

如果您无法升级编译器版本,那么避免转换为普通格式的唯一方法是将变量的值括在引号中并在输出时转义。这样做会使 Less 编译器将其视为字符串并按原样输出值。

在旧版本中,以下 Less 代码:

@a: #fff;
@b: "#fff";
a{
  color-1: #fff;
  color-2: @a;
  color-3: ~"@{b}";
}

将编译为

a {
  color-1: #fff;
  color-2: #ffffff; /* note how this is converted */
  color-3: #fff; /* while this isn't */
}

您应该注意,这样做会影响您想要对值执行的任何颜色通道操作,并且需要使用color() 函数转换为颜色对象。我不建议这样做只是为了避免本质上是一个非常小的问题。

【讨论】:

  • 感谢您的分解。赞成并接受了这个答案。
猜你喜欢
  • 1970-01-01
  • 2014-02-05
  • 2018-07-26
  • 2011-08-04
  • 2018-01-22
  • 2010-10-16
相关资源
最近更新 更多