Concatena le stringhe in Less


129

Penso che questo non sia possibile, ma ho pensato di chiedere in caso ci fosse un modo. L'idea è che ho una variabile per il percorso della cartella delle risorse Web:

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

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

Ottengo questo come risultato:

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

Ma voglio che le stringhe si combinino in una stringa come questa:

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

È possibile concatenare le stringhe insieme in Meno?

Risposte:


225

Usa interpolazione variabile :

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

Codice completo:

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

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

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

Grazie per la risposta! Questo è perfetto. Ora posso assicurarmi che anche se il percorso del contesto cambia, non ci sarà un incubo di refactoring.
juminoz,

Grazie, ho appena riscontrato lo stesso problema e me lo sono perso nei documenti.
David,

Grazie @Paulpro! Stavo riscontrando un problema con il componente aggiuntivo VS Web Compiler, in cui stava cambiando il mio URL dell'immagine di sfondo, e non ero troppo sicuro di come concatenare :)
hatsrumandcode

6
Solo una nota per le persone che potrebbero atterrare su questa risposta ma stanno provando a usarla, ad esempio per combinare una variabile numerica con una stringa come pxo %: Puoi annullare la citazione della stringa pre-aspettandola con una tilde ~, come tale:width: ~"@{w}px";
AsGoodAsItGets

29

Come puoi vedere nella documentazione , puoi usare l'interpolazione di stringhe anche con stringhe variabili e semplici insieme:

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

12

Stavo cercando lo stesso trucco per la gestione delle immagini. Ho usato un mixin per rispondere a questo:

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

Quindi puoi usare:

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

o

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

Ciao e Benvenuto! perché pensi che la risposta accettata non sia più valida? è obsoleto? c'è stato un miglioramento tecnologico? È sbagliato? perché il tuo è migliore?
STT LCU,

9

Per quei valori unitari simili 45dega stringhe come in transform: rotate(45deg)uso la unit(value, suffix)funzione. Esempio:

// 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 non risponde alla domanda, ma è comunque un trucco utile.
trysis,


-7

Uso di Drupal 7. Ho usato un normale segno più e funziona:

@images_path+'bg.png'

5
A meno che non volesse imparare Drupal solo per stringhe concat per usarlo in MENO / CSS, penso che il tuo suggerimento sia inutile. Senza offesa, sto solo dicendo.
ozanmuyes,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.