1
我已經編寫了一個Sass(SCSS)CSS3 @gradient
mixin,它還爲IE9輸出一個base64編碼的SVG字符串。Sass。檢查是否存在自定義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」是否存在,而忽略它?
嗯,這似乎並沒有工作。我從3.2.8更新到Sass 3.2.12,並且以下代碼始終生成「true」: if(function-exists(base64Encode)){0} {0} {0}調試true; } else { \t debug false; } (@刪除,因爲SO不允許它們) –
我猜你需要最新的3.3版本候選版本。如果這不起作用,可能會在GitHub上創建一個問題。 – thelucid