【发布时间】:2016-01-03 02:55:06
【问题描述】:
当我试图覆盖我导入的另一个 .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 解决这种情况的正确且非常有效的方法。当 compass 看到此代码时,它将检查 config.rb 中的目录配置并使用其中的指定路径,因为 image-url() 是一个 Url Helper。
然而问题是,当我不想使用它时,我找不到不使用或取消设置该功能的方法。 (默认为“/images”)
在 config.rb 中设置图像路径也无济于事,我想这不会使该功能以某种神奇的方式消失。
最后我的解决方案是像这样覆盖该函数:
@function image-url($url) {
@return url($slick-loader-path + $url);
}
但是,当您之后必须使用实际上应该使用 config.rb 中的位置的其他代码时,这当然会给您带来麻烦。必须有更好的解决方案。
【问题讨论】:
-
我不明白这里的问题。您似乎对覆盖 Compass image-url 函数很满意,是什么阻止您覆盖 slick-image-url 函数(这似乎是您问题的实际根源)?
-
我很乐意重写 Compass image-url() 函数,因为它可能发生在我的代码中。然而,函数 slick-image-url() 被设置在我导入的 slick-theme.scss 中。在导入之前或之后覆盖该函数将不起作用。修改 slick-image-url() 函数的行为需要我调整 slick-theme.scss,我不想这样做。