更少,编译CSS网址中的变量问题

时间:2013-06-12 14:30:07

标签: compiler-errors less quotes wrapping

我创建了一个基于LESS的小型mixin,用于输出标准或视网膜格式的图像。我无法理解将变量包装在一些与此相关的CSS网址中 - 当我编译下面的代码时,我最终得到 url('{{3 }}'sprite@2x.png' “)即可。两个背景属性似乎都需要包含在引号内,以便编译器获取变量。虽然这有效,但当我尝试为高ppi场景设置背景属性时,我最终会在文件名周围添加这些额外的单引号。

.image(@path, @w: auto, @h: auto) {
    background-image: url('@{base-url}/images/@{path}');
    @path_2x: ~`"@{path}".split('.').slice(0, "@{path}".split('.').length - 1).join(".") + "@2x" + "." + "@{path}".split('.')["@{path}".split('.').length - 1]`;

    @media all and (-webkit-min-device-pixel-ratio : 1.5) {
        background-image: url('@{base-url}/images/@{path_2x}');
        background-size: @w @h;
    }
}

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

我假设你将@path作为一个字符串本身传递,例如:

.image('sprite.png');

你可以做以下两件事之一:

1)在通话时退出(用户不太友好)

.image(~'sprite.png');

2)修改javascript以不添加额外的引号(用户友好)

这会保留未转义的通话.image('sprite.png');,但请注意我已将"@{path}"更改为@{path},因为该路径已作为字符串传递,因此@{path}已经解析为字符串并且能够进行字符串操作。通过添加引号,您实际上是从'sprite.png'"'sprite.png'"的路径,然后留下额外的引号。

@path_2x: ~`@{path}.split('.').slice(0, "@{path}".split('.').length - 1).join(".") + "@2x" + "." + @{path}.split('.')[@{path}.split('.').length - 1]`;