Concatenate strings in Less

2020-01-27 13:02发布

问题:

I think this is not possible, but I thought I ask in case there is a way. The idea is that I have a variable for path to web resource folder:

@root: "../img/";
@file: "test.css";
@url: @root@file;

.px {
    background-image: url(@url);
}

I get this as a result:

.px { background-image: url("../img/" "test.css"); }

But, I want the strings to combine into one string like this:

.px { background-image: url("../img/test.css"); }

Is it possible to concatenate strings together in Less?

回答1:

Use Variable Interpolation:

@url: "@{root}@{file}";

Full code:

@root: "../img/";
@file: "test.css";

@url: "@{root}@{file}";

.px{ background-image: url(@url); }


回答2:

As you can see in the documentation, you can use string interpolation also with variable and plain strings together:

@base-url: "http://assets.fnord.com";
background-image: url("@{base-url}/images/bg.png");


回答3:

I was looking for the same trick for handling images. I used a mixin to answer this:

.bg-img(@img-name,@color:"black"){
    @base-path:~"./images/@{color}/";
    background-image: url("@{base-path}@{img-name}");
}

Then you can use :

.px{
    .bg-img("dot.png");
}

or

.px{
    .bg-img("dot.png","red");
}


回答4:

For those string-like unit values like 45deg in transform: rotate(45deg) use the unit(value, suffix) function. Example:

// Mixin
.rotate(@deg) {
  @rotation: unit(@deg, deg);
  -ms-transform: rotate(@rotation);
  transform: rotate(@rotation);
}

// Usage
.rotate(45);

// Output
-ms-transform: rotate(45deg);
transform: rotate(45deg);


回答5:

Don't know if you're using less.js or lessphp (like in WP-Less plugin for WordPress) but with lessphp you can "unquote" strings with ~ : http://leafo.net/lessphp/docs/#string_unquoting



回答6:

Using Drupal 7. I've used an ordinary plus mark and it's working:

@images_path+'bg.png'