当我试图覆盖我导入的另一个.scs文件中的一些值时,我遇到了这个问题。特别是我想在我的项目中使用光滑的滑块
所以我继续下载源代码并导入代码
为了让光滑的滑块在我的设置中工作,我必须通过变量覆盖给它自己的位置
所以最后我有了这样的东西:
$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";
到目前为止没有什么特别的
当我发现这不起作用时,有趣的部分就开始了,因为一些聪明的人显然想充分利用指南针的潜力,并在光滑的.scs代码中添加了以下几行:
@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;
}
}
你不能责怪他们,因为这是国际海事组织解决这种情况的正确和有效的方法。当compass看到这段代码时,它将检查config.rb
中的目录配置,并使用其中指定的路径,因为image-url()是一个url Helper
然而,问题是,当我不想使用它时,我找不到不使用或取消设置该函数的方法。(默认为"/images")
在config.rb中设置图像路径也没有帮助,我想这不会让函数以某种神奇的方式消失。
最后,我的解决方案是这样覆盖这个功能:
@function image-url($url) {
@return url($slick-loader-path + $url);
}
但这当然会给你带来麻烦,当你必须在之后处理其他代码时,这些代码实际上应该使用config.rb中的位置。必须有更好的解决方案。
image-url()函数是用Ruby编写的,这意味着它被注入到Sass本身中,并且与任何其他标准函数的行为方式相同(请注意,Compass只是Sass的一个花哨的包装器)。这个函数对您来说总是可用的,而无需导入任何内容(与用Sass编写的函数不同)。这也意味着,如果覆盖它,就无法恢复原始版本。
如果第三方库不恰当地引用了此函数,那么如果您不愿意自己进行修补,则应该向他们请求修复。