1

我编写了一个 Sass (SCSS) CSS3 @gradientmixin,它还为 IE9 输出 base64 编码的 SVG 字符串。

这个 mixin 依赖于用户的 Sass “watch”文件中需要的这个自定义 ruby​​ 函数:

require 'sass'
require 'base64'

module Sass::Script::Functions
    def base64Encode(string)
        assert_type string, :String
        Sass::Script::String.new(Base64.encode64(string.value))
    end
    declare :base64Encode, :args => [:string]
end

就是这样称呼的:base64Encode($svgStr).

但是,我想发布我的 mixin 库,并且不想强制要求这个自定义函数。

例如,用于 VS2012 的 AFAIK Web Workbench无法包含自定义功能。如果不包括在内,那么我不想输出 base64 规则。

那么,是否可以在 mixin 中检测是否base64Encode作为自定义函数存在?否则,您最终会得到以下结果:

background-image: url("data:image/svg+xml;base64,base64Encode('<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"100%\" height=\"100%\" viewBox=\"0 0 1 1\" preserveAspectRatio=\"none\"><linearGradient id=\"g522\" gradientUnits=\"userSpaceOnUse\" x1=\"0%\" y1=\"0%\" x2=\"0%\" y2=\"100%\"><stop stop-color=\"white\" offset=\"0\" /><stop stop-color=\"whitesmoke\" offset=\"1\" /></linearGradient><rect x=\"0\" y=\"0\" width=\"1\" height=\"1\" fill=\"url(#g522)\" /></svg>')");

代替

background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRo PSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHZpZXdCb3g9IjAgMCAxIDEiIHByZXNl cnZlQXNwZWN0UmF0aW89Im5vbmUiPjxsaW5lYXJHcmFkaWVudCBpZD0iZzUy MiIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIwJSIgeTE9 IjAlIiB4Mj0iMCUiIHkyPSIxMDAlIj48c3RvcCBzdG9wLWNvbG9yPSJ3aGl0 ZSIgb2Zmc2V0PSIwIiAvPjxzdG9wIHN0b3AtY29sb3I9IndoaXRlc21va2Ui IG9mZnNldD0iMSIgLz48L2xpbmVhckdyYWRpZW50PjxyZWN0IHg9IjAiIHk9 IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9InVybCgjZzUyMikiIC8+ PC9zdmc+ ");

或者可以以某种方式在返回的字符串中搜索以检查“base64Encode”是否存在并忽略它?

4

1 回答 1

1

此拉取请求(已合并)为您提供“功能存在”功能:https ://github.com/nex3/sass/pull/821

于 2013-10-12T12:42:24.317 回答