2014-02-06 127 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){