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 ルールを出力したくありません。

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

このプル リクエスト (マージ済み) は、「function-exists」機能を提供します: https://github.com/nex3/sass/pull/821

于 2013-10-12T12:42:24.317 に答える