Verketten Sie Zeichenfolgen in Less


129

Ich denke, das ist nicht möglich, aber ich dachte, ich frage, falls es einen Weg gibt. Die Idee ist, dass ich eine Variable für den Pfad zum Webressourcenordner habe:

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

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

Ich bekomme das als Ergebnis:

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

Ich möchte jedoch, dass die Zeichenfolgen wie folgt zu einer Zeichenfolge kombiniert werden:

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

Ist es möglich, Zeichenfolgen in Less miteinander zu verknüpfen?

Antworten:


225

Verwenden Sie Variable Interpolation :

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

Vollständiger Code:

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

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

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

Danke für die Antwort! Dies ist perfekt. Jetzt kann ich sicherstellen, dass es auch dann keinen Refactoring-Albtraum gibt, wenn sich der Kontextpfad ändert.
Juminoz

Danke, ich bin gerade auf das gleiche Problem gestoßen und habe es in den Dokumenten verpasst.
David

Danke @Paulpro! Ich hatte ein Problem mit dem VS Web Compiler-Add-On, bei dem meine Hintergrundbild-URL
geändert wurde

6
Nur eine Anmerkung für Personen, die möglicherweise auf diese Antwort stoßen, aber versuchen, sie zu verwenden, z. B. um eine numerische Variable mit einer Zeichenfolge wie pxoder zu kombinieren %: Sie können die ~width: ~"@{w}px";
Angabe

29

Wie Sie in der Dokumentation sehen können , können Sie die Zeichenfolgeninterpolation auch mit variablen und einfachen Zeichenfolgen zusammen verwenden:

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

12

Ich suchte nach dem gleichen Trick für den Umgang mit Bildern. Ich habe ein Mixin verwendet, um dies zu beantworten:

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

Dann können Sie verwenden:

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

oder

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

Hallo und Willkommen! Warum ist die akzeptierte Antwort Ihrer Meinung nach nicht mehr gültig? ist es veraltet? Gab es eine technologische Verbesserung? Es ist falsch? warum ist deins besser
STT LCU

9

Für solche stringartigen Einheitswerte wie 45degin transform: rotate(45deg)wird die unit(value, suffix)Funktion verwendet. Beispiel:

// 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
Beantwortet die Frage technisch nicht, ist aber dennoch ein nützlicher Trick.
Trysis


-7

Verwenden von Drupal 7. Ich habe ein gewöhnliches Pluszeichen verwendet und es funktioniert:

@images_path+'bg.png'

5
Ich halte Ihren Vorschlag für wertlos, es sei denn, er lernt Drupal bereitwillig, nur damit Concat-Strings es in LESS / CSS verwenden können. Nichts für ungut, sage ich nur.
Ozanmuyes
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.