Concatenar cadeias de caracteres em Menos


129

Eu acho que isso não é possível, mas pensei em perguntar se existe um caminho. A idéia é que eu tenho uma variável para o caminho para a pasta de recursos da web:

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

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

Eu recebo isso como resultado:

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

Mas, eu quero que as strings se combinem em uma string como esta:

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

É possível concatenar seqüências de caracteres juntas em Menos?

Respostas:


225

Use interpolação variável :

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

Código completo:

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

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

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

Obrigado pela resposta! Isto é perfeito. Agora posso garantir que, mesmo que o caminho do contexto mude, não haverá um pesadelo de refatoração.
juminoz

Obrigado, me deparei com o mesmo problema e perdi isso nos documentos.
David

Obrigado @Paulpro! Eu estava tendo um problema com VS Web Compiler add-on, onde foi mudando meu background-image url, e eu não estava muito certo como fazer concatenação :)
hatsrumandcode

6
Apenas uma observação para as pessoas que podem pousar nessa resposta, mas que estão tentando usá-la, por exemplo, para combinar uma variável numérica com uma sequência como pxou %: Você pode cancelar a citação da sequência, antecipando-a com um til ~, como tal:width: ~"@{w}px";
AsGoodAsItGets

29

Como você pode ver na documentação , você pode usar a interpolação de cadeias também com cadeias variáveis ​​e simples juntas:

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

12

Eu estava procurando o mesmo truque para lidar com imagens. Eu usei um mixin para responder a isso:

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

Então você pode usar:

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

ou

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

Olá e bem-vindo! por que você acha que a resposta aceita não é mais válida? está desatualizado? houve uma melhoria tecnológica? Está errado? por que o seu é melhor?
STT LCU

9

Para aqueles corda-como unidade de valores como 45degna transform: rotate(45deg)utilização da unit(value, suffix)função. Exemplo:

// 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);

1
Tecnicamente, não responde à pergunta, mas ainda é um truque útil.
trysis


-7

Usando o Drupal 7. Eu usei uma marca de adição comum e está funcionando:

@images_path+'bg.png'

5
A menos que ele queira aprender Drupal apenas para concat strings para usá-lo em LESS / CSS, acho que sua sugestão é inútil. Sem ofensa, só estou dizendo.
Oznmuyes
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.