มีตัวแปรในเส้นทางรูปภาพใน Sass หรือไม่?


123

ฉันต้องการมีตัวแปรหนึ่งตัวที่มีรูทพา ธ ไปยังรูปภาพทั้งหมดของฉันในไฟล์ CSS ฉันไม่สามารถเข้าใจได้ว่าสิ่งนี้เป็นไปได้หรือไม่ใน Pure Sass (โครงการเว็บจริงไม่ใช่ RoR ดังนั้นจึงไม่สามารถใช้ asset_pipeline หรือแจ๊สแฟนซีใด ๆ ได้)

นี่คือตัวอย่างของฉันที่ไม่ได้ผล ในการคอมไพล์มันขัดขวางที่ตัวอย่างแรกของตัวแปรในคุณสมบัติ url พื้นหลังพูดว่า ( "Invalid CSS after "..site/background": expected ")")

การกำหนดฟังก์ชันเพื่อส่งกลับเส้นทาง:

//Vars
$assetPath : "/assets/images";

//Functions
@function get-path-to-assets($assetPath){
  @return $assetPath;
}

การใช้ฟังก์ชัน:

body {
  margin: 0 auto;
  background: url($get-path-to-assets/site/background.jpg) repeat-x fixed 0 0;
  width: 100%; }

ความช่วยเหลือใด ๆ จะได้รับการชื่นชม

คำตอบ:


207

คุณได้ลองใช้ไวยากรณ์Interpolation แล้วหรือยัง?

background: url(#{$get-path-to-assets}/site/background.jpg) repeat-x fixed 0 0;

1
มันใช้ไม่ได้สำหรับฉันเพราะ CssVariablesProcessor ไม่ประมวลผลตัวแปรแม้ว่าจะตั้งค่าเป็นตัวประมวลผลก่อนหน้า CssDataUriPreProcessor
Alexey

1
ยังใช้งานได้ในเส้นทางที่ยกมาเช่นในมิกซ์อินแบบอักษรของเข็มทิศ '#{$fontName}.ext', ..
Fleuv

ใช่ควรใช้ในเส้นทางที่ยกมา ฉลาดอื่น ๆ แสดงข้อผิดพลาดใน netbeans IDE url ("# {$ get-path-to-assets} /site/background.jpg")
Pons Purushothaman

94

ไม่จำเป็นต้องมีฟังก์ชั่น:

$assetPath : "/assets/images";

...

body {
  margin: 0 auto;
  background: url(#{$assetPath}/site/background.jpg) repeat-x fixed 0 0;
  width: 100%; }

ดูรายละเอียดในเอกสารการแก้ไข


7
ต้องการความกะทัดรัดโดยชี้ไปที่ตัวแปรโดยตรง
skia.heliou

6

กำลังค้นหาคำตอบสำหรับคำถามเดียวกัน แต่คิดว่าฉันพบทางออกที่ดีกว่า: http://blog.grayghostvisuals.com/compass/image-url/

โดยทั่วไปคุณสามารถกำหนดเส้นทางรูปภาพของคุณใน config.rb และคุณใช้ตัวช่วย image-url ()


1

การเพิ่มคำตอบที่ถูกต้องข้างต้น ฉันใช้ netbeans IDE และแสดงข้อผิดพลาดขณะใช้url(#{$assetPath}/site/background.jpg)วิธีนี้ มันเป็นเพียงข้อผิดพลาดของ netbeans และไม่มีข้อผิดพลาดในการคอมไพล์ sass แต่ข้อผิดพลาดนี้แบ่งรหัสการจัดรูปแบบใน netbeans และรหัสกลายเป็นเรื่องน่าเกลียด แต่เมื่อฉันใช้มันภายในคำพูดเช่นด้านล่างมันแสดงให้เห็นถึงความประหลาดใจ!

url("#{$assetPath}/site/background.jpg")


0

เราสามารถใช้เส้นทางสัมพัทธ์แทนพา ธ สัมบูรณ์:

$assetPath: '~src/assets/images/';
$logo-img: '#{$assetPath}logo.png';
@mixin logo {
  background-image: url(#{$logo-img});
}

.logo {
    max-width: 65px;
    @include logo;
 }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.