String gabungan dalam Less


129

Saya pikir ini tidak mungkin, tapi saya pikir saya bertanya kalau-kalau ada cara. Idenya adalah bahwa saya memiliki variabel untuk path ke folder sumber daya web:

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

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

Saya mendapatkan ini sebagai hasilnya:

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

Tapi, saya ingin string digabungkan menjadi satu string seperti ini:

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

Apakah mungkin untuk menggabungkan string bersama di Less?

Jawaban:


225

Gunakan Interpolasi Variabel :

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

Kode lengkap:

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

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

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

Terima kasih atas jawabannya! Ini sempurna. Sekarang saya dapat memastikan bahwa bahkan jika jalur konteks berubah, tidak akan ada mimpi buruk refactoring.
— juminoz

Terima kasih, saya baru saja menemukan masalah yang sama dan melewatkannya di dokumen.
— David

Terima kasih @Paulpro! Saya mengalami masalah dengan add-on VS Web Compiler, di mana itu mengubah url gambar latar belakang saya, dan saya tidak terlalu yakin bagaimana melakukan penggabungan :)
— hatsrumandcode

6
Hanya sebuah catatan untuk orang-orang yang mungkin mendapatkan jawaban ini tetapi mencoba menggunakannya misalnya untuk menggabungkan variabel numerik dengan string seperti pxatau %: Anda dapat membatalkan tanda kutip string dengan pra- ~width: ~"@{w}px";
— pendingnya

29

Seperti yang Anda lihat dalam dokumentasi , Anda dapat menggunakan interpolasi string juga dengan string variabel dan polos bersama-sama:

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

12

Saya mencari trik yang sama untuk menangani gambar. Saya menggunakan mixin untuk menjawab ini:

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

Maka Anda dapat menggunakan:

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

atau

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

Halo dan selamat datang! menurut Anda mengapa jawaban yang diterima tidak lagi valid? apakah sudah usang? apakah ada peningkatan teknologi? Itu salah? mengapa milikmu lebih baik?
— STT LCU

9

Untuk nilai-nilai unit seperti string seperti 45degdalam transform: rotate(45deg)menggunakan unit(value, suffix)fungsi. Contoh:

// 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
Secara teknis tidak menjawab pertanyaan, tetapi tetap merupakan trik yang bermanfaat.
— trysis


-7

Menggunakan Drupal 7. Saya telah menggunakan tanda plus biasa dan berfungsi:

@images_path+'bg.png'

5
Kecuali dia mau belajar Drupal hanya untuk string untuk menggunakannya dalam KURANG / CSS, saya pikir saran Anda tidak berharga. Jangan tersinggung, saya hanya mengatakan.
— ozanmuyes
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.