【发布时间】:2015-04-17 13:07:28
【问题描述】:
在我的 rails 3.2 应用程序中,使用 compass 0.12.7 和 rails-compass 2.0.0 生成精灵。图标目录为[root]/public/img/marketings/icons 和[root]/public/img/marketings/icons-retina
由于图像目录不是 compass 的默认图像目录,因此在 config/initializers 中添加了 compass_config.rb
options = {
:sprite_load_path => Compass.configuration.sprite_load_path + ["#{Rails.root}/public/img"],
:images_dir => "public/img",
:images_path => "#{Rails.root}/public/img",
:generated_images_dir => "public/img",
:generated_images_path => "#{Rails.root}/public/img"
}
Compass.add_configuration(options, "sprites")
编写了一个自定义的 sass 文件:
$sprites: sprite-map("marketings/icons/*.png");
$sprites-url: sprite-url($sprites);
$sprites2x: sprite-map("marketings/icons-retina/*.png");
$sprites2x-url: sprite-url($sprites2x);
// some more codes....
@mixin retina-sprite($name, $sprites, $sprites-url, $sprites2x, $sprites2x-url, $dimensions: true, $pad: 0) {
@if $dimensions == true {
@include sprite-dimensions($sprites, $name);
}
background-image: $sprites-url;
background-position: sprite-position($sprites, $name, -$pad, -$pad);
background-repeat: no-repeat;
@if $pad > 0 {
padding: $pad;
}
@include hidpi(1.5) {
$pos: sprite-position($sprites2x, $name, -$pad*2, -$pad*2);
background-image: $sprites2x-url;
background-position: nth($pos, 1) nth($pos, 2)/2;
@include background-size(ceil(image-width(sprite-path($sprites2x)) / 2), auto);
}
}
精灵图像生成正确,但在 @include sprite-dimensions($sprites, $name) 和 @include background-size(ceil(image-width(sprite-path($sprites2x)) / 2), auto) 的行中出现“无法将 nil 转换为字符串”错误
如果将图标目录移动到 app/assets/images 并删除 compass_config.rb,它可以正常工作。但是由于某些历史原因,图标必须位于 public/img 目录中。我的 compass_config.rb 有什么问题吗?
【问题讨论】:
标签: ruby-on-rails-3 sprite compass-sass