【问题标题】:Is it possible to not use / turn off Compass Url Helpers on purpose?是否可以故意不使用/关闭 Compass Url Helpers?
【发布时间】: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,我不想这样做。

标签: sass compass


【解决方案1】:

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

如果第 3 方库不恰当地引用了这个函数,那么如果你不愿意自己修补它,你应该向他们请求修复。

【讨论】:

  • 不是我想听到的答案,但我想那时我必须处理它。解决第 3 方代码中该部分的唯一方法似乎是使用 variable-exists()。会试试看的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-04
  • 2022-12-04
  • 2013-05-10
  • 2012-06-21
  • 1970-01-01
  • 2014-12-20
  • 1970-01-01
相关资源
最近更新 更多