是否有可能故意不使用/关闭Compass Url助手?

时间:2016-01-03 02:55:07

标签: sass compass

当我尝试覆盖我导入的另一个.scss文件中的某些值时,我遇到了这个问题。 具体来说,我想在我的项目中使用slick slider 所以我继续,下载了源代码并导入了该代码 另外,对于光滑的滑块在我的设置中工作,我必须通过变量覆盖给它自己的位置 所以最后我有这样的事情:

$slick-font-path: "../bower_components/slick-carousel/slick/fonts/";
$slick-loader-path: "../bower_components/slick-carousel/slick/";

@import "../../bower_components/slick-carousel/slick/slick";
@import "../../bower_components/slick-carousel/slick/slick-theme";

到目前为止没什么特别的。
有趣的部分从我发现这不起作用开始,因为一些聪明的人显然想要充分利用指南针并在浮油中添加以下行.scss code

@function slick-image-url($url) {
    @if function-exists(image-url) {
        @return image-url($url);
    }
    @else {
        @return url($slick-loader-path + $url);
    }
}

.slick-list {
   .slick-loading & {
        background: #fff slick-image-url("ajax-loader.gif") center center no-repeat;
    }
}

你不能责怪他们,因为这是IMO解决这种情况的正确和非常有效的方法。当指南针看到此代码时,它将检查config.rb中的目录配置并使用指定的路径,因为image-url()是一个Url Helper。
然而问题是,当我不想使用它时,我找不到不使用或取消设置该功能的方法。 (默认为“/ images”)
在config.rb中设置图像路径也没有帮助,我想这不会使该功能以某种神奇的方式消失。

最后,我对此的解决方案就是覆盖了这样的功能:

@function image-url($url) {
    @return url($slick-loader-path + $url);
}

但是当你必须使用其他代码时,这当然会让你遇到麻烦,这些代码实际上应该使用config.rb中的位置。必须有一个更好的解决方案。

1 个答案:

答案 0 :(得分:0)

image-url()函数是用Ruby编写的,这意味着它被注入到Sass本身,其行为与任何其他标准函数的行为相同(请注意,Compass只是Sass的一个奇特的包装器)。您可以随时使用此功能,而无需导入任何内容(与Sass中编写的函数不同)。这也意味着如果你覆盖它,就无法恢复原始版本。

如果第三方库不恰当地引用此功能,那么如果您不愿意自行修补,则应该请求修复它们。