当我尝试覆盖我导入的另一个.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中的位置。必须有一个更好的解决方案。
答案 0 :(得分:0)
image-url()函数是用Ruby编写的,这意味着它被注入到Sass本身,其行为与任何其他标准函数的行为相同(请注意,Compass只是Sass的一个奇特的包装器)。您可以随时使用此功能,而无需导入任何内容(与Sass中编写的函数不同)。这也意味着如果你覆盖它,就无法恢复原始版本。
如果第三方库不恰当地引用此功能,那么如果您不愿意自行修补,则应该请求修复它们。