【问题标题】:What is the right syntax for .less variable interpolation?.less 变量插值的正确语法是什么?
【发布时间】:2012-12-08 05:01:40
【问题描述】:

我有一个 .less 样式表,其结构如下:

@width:600;

.some-style
{
    width:@{width}px;
}

这会产生以下错误:

Expected '}' on line x in file '..\styles.less'

我需要这些大括号,因为我需要将该变量与以下 px 后缀区分开来(@widthpx 不起作用,因为它会查找名为 widthpx 的变量)。而且我不能使用空格,因为600 px 不是有效的css。使用括号代替花括号也不起作用。

我在这里做错了什么?

更新:我从包管理器安装了最新版本的 .less,现在它工作得更好了,但有一个致命缺陷:

   width:@(width)px;  <--note the parentheses

现在可以编译,但会发出这个 CSS:

  600 px  <--note the space, which is invalid CSS, thus useless.

已解决:ScottS 向我指出了解决方案。除了他的两种方法之外,编译器似乎可以对字符串进行数学运算。所以这行得通:

@width:600px;

.some-style
{
    width:@width / 2;  <--correctly emits "300px"
}

【问题讨论】:

    标签: less dotless


    【解决方案1】:

    使用unit函数还有更好的方法:

    @width: 600;
    
    .some-style
    {
        width: unit(@width, px);
    }
    

    如果你经常这样做,那么你可以定义mixin

    .widthInPx(@w)
    {
        width: unit(@w, px);
    }
    
    .some-style
    {
        .widthInPx(@width);
    }
    

    【讨论】:

      【解决方案2】:

      因此,如果我理解正确,您想给 width 一个值但没有任何单位,并在调用时分配单位。我不确定为什么你会想要这样做,但有两种方法可行:

      ONE:将width 设为字符串,然后进行字符串插值:

      @width: '600';
      
      .some-style
      {
          width: ~'@{width}px';
      }
      

      :乘以1px

      @width: 600;
      
      .some-style
      {
          width: @width * 1px;
      }
      

      对于“无单位”数字的情况以及以后如何添加单位(因为问题最初似乎是这样),我将上述答案保留在适当的位置。但是,根据您的评论,让我解释为什么@width: 600px 有效。 LESS 不会将其视为 string (正如您提到的那样)。相反,它将其视为带有单位的数字。 To LESS 600px 不是字符串(除非用引号括起来),而是以pixels 为单位的数字600。这就是为什么它可以很好地对其进行操作,而您不必担心它。无论这些单位是 em% 还是任何其他有效的 CSS 单位,它都可以这样做。

      【讨论】:

      • 原因是我可以用单位做数学运算。例如,我想做宽度:@{width / 2}px。但我刚刚检查了一下,看起来编译器确实理解这一点。如果我将原始定义更改为@width:600px,然后将样式设置为width:@width / 2,编译器会正确发出300px。对我来说,在字符串 600px 而不是数字 600 上完成数学运算是违反直觉的,但它解决了我的问题。您能否使用此解决方案更新您的答案(或添加新答案),我会接受吗?上述解决方案确实不能解决问题。
      • @JoshuaFrank:也许在你发表评论之前我也打败了你。我显然误解了你最初不在@width 上放置单位的原因。我将更新答案以帮助解释为什么这不是您认为的“违反直觉”。
      猜你喜欢
      • 2016-12-07
      • 1970-01-01
      • 2015-08-03
      • 2016-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-04
      • 1970-01-01
      相关资源
      最近更新 更多