Concaténer les chaînes en moins


129

Je pense que ce n'est pas possible, mais j'ai pensé demander au cas où il y aurait un moyen. L'idée est que j'ai une variable pour le chemin d'accès au dossier de ressources Web:

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

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

J'obtiens ceci en conséquence:

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

Mais, je veux que les chaînes se combinent en une seule chaîne comme ceci:

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

Est-il possible de concaténer des chaînes ensemble dans Less?

Réponses:


225

Utilisez l' interpolation variable :

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

Code complet:

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

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

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

Merci d'avoir répondu! C'est parfait. Maintenant, je peux m'assurer que même si le chemin du contexte change, il n'y aura pas de cauchemar de refactoring.
juminoz

Merci, je viens de rencontrer le même problème et je l'ai manqué dans la documentation.
David

Merci @Paulpro! J'avais un problème avec l'add-on VS Web Compiler, où il changeait l'URL de mon image d'arrière-plan, et je ne savais pas trop comment faire la concaténation :)
hatsrumandcode

6
Juste une note pour les personnes qui pourraient atterrir sur cette réponse mais qui essaient de l'utiliser, par exemple pour combiner une variable numérique avec une chaîne comme pxou %: Vous pouvez annuler les guillemets de la chaîne en la pré-attendant avec un tilde ~, comme tel:width: ~"@{w}px";
AsGoodAsItGets

29

Comme vous pouvez le voir dans la documentation , vous pouvez utiliser l'interpolation de chaîne également avec des chaînes variables et simples ensemble:

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

12

Je cherchais la même astuce pour gérer les images. J'ai utilisé un mixin pour répondre à ceci:

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

Ensuite, vous pouvez utiliser:

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

ou

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

Bonjour et bienvenue! pourquoi pensez-vous que la réponse acceptée n'est plus valable? est-ce obsolète? y a-t-il eu une amélioration technologique? C'est faux? pourquoi le vôtre est meilleur?
STT LCU

9

Pour les valeurs unitaires semblables 45degà des chaînes, transform: rotate(45deg)utilisez la unit(value, suffix)fonction. Exemple:

// 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
Ne répond pas techniquement à la question, mais reste une astuce utile.
trysis le


-7

En utilisant Drupal 7. J'ai utilisé une marque plus ordinaire et cela fonctionne:

@images_path+'bg.png'

5
À moins qu'il n'apprenne volontairement Drupal juste pour que les chaînes concat l'utilisent en LESS / CSS, je pense que votre suggestion ne vaut rien. Aucune offense, je dis juste.
ozanmuyes
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.