动态构建更少的@import url

lin*_*e-o 1 import less

在使用google webfont import mixin时,我注意到无法动态构建@import URL。

.gFontImport (@name, @weights, @subsets) {
    @url: "http://fonts.googleapis.com/css?family=@{name}:@{weights}&subset=@{subsets}";
    @import url(@url);
}
Run Code Online (Sandbox Code Playgroud)

可以缩小到

@url: "http://localhost/test.css";
@import url(@url);
Run Code Online (Sandbox Code Playgroud)

这些附加测试均无效:

@import url("@{url}"); // this one renders at least

@import url(~"@{url}");
Run Code Online (Sandbox Code Playgroud)

当编译器呈现CSS文件时,@ import URL始终保持不变,例如 "@{url}"

Mar*_*jak 5

它似乎可以在1.4 beta中使用。

1.4

LESS中做这样的事情(我在less2css.org尝试过):

.gFontImport (@name, @weights, @subsets) {
    @import url('http://fonts.googleapis.com/css?family=@{name}:@{weights}&subset=@{subsets}');
}

.gFontImport("Roboto+Slab",400,latin);
Run Code Online (Sandbox Code Playgroud)

CSS中将具有预期的输出:

@import url('http://fonts.googleapis.com/css?family=Roboto+Slab:400&subset=latin');
Run Code Online (Sandbox Code Playgroud)

<= 1.3.3

如果对您不起作用,则可以使用一种解决方法,将@import呼叫注入选择器名称:

.gFontImport (@name, @weights, @subsets) {
    @gimport: ~"@import url('http://fonts.googleapis.com/css?family=@{name}:@{weights}&subset=@{subsets}');";
    @{gimport} some-selector {/* */};
}
Run Code Online (Sandbox Code Playgroud)

所以在LESS中调用类似这样的内容:

.gFontImport("Roboto+Slab",400,latin);
Run Code Online (Sandbox Code Playgroud)

将在CSS中输出:

@import url('http://fonts.googleapis.com/css?family=Roboto+Slab:400&subset=latin');
some-selector {
  /**/
}
Run Code Online (Sandbox Code Playgroud)

这行得通,但是有点混乱。在LESS的JavaScript实现中,您可以使用

`'\n'`
Run Code Online (Sandbox Code Playgroud)

`'\t'`
Run Code Online (Sandbox Code Playgroud)

在字符串插值中使其看起来更整洁。