เชื่อมต่อสตริงใน Less


129

ฉันคิดว่านี่เป็นไปไม่ได้ แต่ฉันคิดว่าฉันถามในกรณีที่มีวิธี แนวคิดคือฉันมีตัวแปรสำหรับพา ธ ไปยังโฟลเดอร์ทรัพยากรบนเว็บ:

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

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

ฉันได้รับสิ่งนี้เป็นผล:

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

แต่ฉันต้องการให้สตริงรวมกันเป็นสตริงเดียวดังนี้:

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

เป็นไปได้ไหมที่จะต่อสตริงเข้าด้วยกันใน Less?

คำตอบ:


225

ใช้การแก้ไขตัวแปร :

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

รหัสเต็ม:

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

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

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

ขอบคุณสำหรับคำตอบ! สมบูรณ์แบบนี้ ตอนนี้ฉันมั่นใจได้ว่าแม้ว่าเส้นทางบริบทจะเปลี่ยนไป แต่ก็ไม่มีฝันร้ายที่ปรับโครงสร้างใหม่
juminoz

ขอบคุณฉันเพิ่งเจอปัญหาเดียวกันและพลาดสิ่งนั้นในเอกสาร
เดวิด

ขอบคุณ @Paulpro! ฉันมีปัญหากับโปรแกรมเสริม VS Web Compiler ซึ่งมันกำลังเปลี่ยน url ภาพพื้นหลังของฉันและฉันก็ไม่แน่ใจว่าจะทำการเรียงต่อกันอย่างไร :)
hatsrumandcode

6
หมายเหตุสำหรับผู้ที่อาจตอบคำตอบนี้ แต่กำลังพยายามใช้เช่นการรวมตัวแปรตัวเลขเข้ากับสตริงเช่นpxหรือ%: คุณสามารถยกเลิกการอ้างอิงสตริงได้โดยการรอไว้ล่วงหน้าด้วยเครื่องหมายทิลเดอ~เช่น:width: ~"@{w}px";
AsGoodAsItGets

29

ดังที่คุณเห็นในเอกสารประกอบคุณสามารถใช้การแก้ไขสตริงร่วมกับตัวแปรและสตริงธรรมดาร่วมกันได้:

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

12

ฉันกำลังมองหาเคล็ดลับเดียวกันในการจัดการรูปภาพ ฉันใช้ mixin เพื่อตอบสิ่งนี้:

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

จากนั้นคุณสามารถใช้:

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

หรือ

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

สวัสดีและยินดีต้อนรับ! ทำไมคุณถึงคิดว่าคำตอบที่ยอมรับใช้ไม่ได้อีกต่อไป มันล้าสมัยไหม มีการปรับปรุงเทคโนโลยีหรือไม่? มันผิด? ทำไมของคุณถึงดีกว่า?
STT LCU

9

สำหรับผู้สตริงเหมือนหน่วยค่าเช่น45degในtransform: rotate(45deg)การใช้งานunit(value, suffix)ฟังก์ชั่น ตัวอย่าง:

// 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
ไม่ได้ตอบคำถามในทางเทคนิค แต่ยังคงเป็นเคล็ดลับที่มีประโยชน์
trysis

7

ไม่ทราบว่าคุณใช้less.jsหรือ lessphp (เช่นในปลั๊กอินWP-Lessสำหรับ WordPress) แต่ด้วย lessphp คุณสามารถ "ยกเลิกการอ้างสิทธิ์" สตริงด้วย~: http://leafo.net/lessphp/docs/#string_unquoting


1
สิ่งนี้ใช้ได้กับ LESS ปกติเช่นกัน ฉันไม่ทราบว่าในปี 2012 คำตอบนี้ถูกเขียนขึ้นหรือไม่
trysis

-7

การใช้ Drupal 7. ฉันใช้เครื่องหมายบวกธรรมดาและใช้งานได้:

@images_path+'bg.png'

5
เว้นแต่ว่าเขาเต็มใจที่จะเรียนรู้ Drupal เพียงเพื่อต่อสตริงเพื่อใช้ใน LESS / CSS ฉันคิดว่าข้อเสนอแนะของคุณไม่มีค่า ไม่มีความผิดฉันแค่พูด
ozanmuyes
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.