2014-02-06 168 views
2

我使用指南針來生成精靈,並有一個混合程序計算原始資產的寬度和高度,並將其添加到css中。Compass/Sass檢查文件是否存在

我也有一個選項在這個混合傳遞真實或錯誤的懸停狀態圖像。但不是每次使用mixin時都要指定這個,如果文件存在,我想默認添加hover css。

我已經添加下面我config.rb文件(迄今爲止它我唯一的擴展名)

module Sass::Script::Functions 
    def file_exists(image_file) 
    path = image_file.value 
    Sass::Script::Bool.new(File.exists?(path)) 
    end 
end 

而且我的mixin看起來像這樣

@mixin sprite($name, $hover: true, $active: false, $pad:0){ 
    @include sprite-dimensions($sprites, $name); 
    background-repeat: no-repeat; 
    background-image: sprite-url($sprites); 
    background-position: sprite-position($sprites, $name, -$pad, -$pad); 

    @if $hover == true{ 
     $name_hover: $name + _hover; 
     @if file_exists($name_hover){ 
      &:hover { 
       background-position: sprite-position($sprites, $name_hover, -$pad, -$pad); 
      } 
     } 
    } 

} 

file_exists功能不返回true;可能是因爲文件的路徑不正確。什麼/如何指定正確的路徑?

+0

確保'image_file'是一個字符串。你也不需要整個'path'變量聲明行;只需將其替換爲w /'image_file'即可。 – T145

+0

看起來圖像的路徑可能與您的Ruby文件相關,而不是來自調用該函數的Sass文件。 – cimmanon

回答

0

我設法找到一個解決方案,即,而不是檢查文件是否存在,它會檢查所創建的精靈圖(從所有那肯定存在的文件)

我改變

@if file_exists($name_hover){ 

@if sprite_has_selector($sprites, $name, hover){