也许有人可以在我的测试中指出一个错误,但似乎如果我想在 CSS 编码中使用 SVG 过滤器data: uri
以避免使用额外的文件,如果数据没有编码为 base64,它会失败。
我已经用 Firefox Aurora 进行了测试,其他浏览器似乎在这两种情况下都无法识别过滤器。
测试文件:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style type="text/css">
#filter1 {
filter:url(data:image/svg+xml,<svg xmlns%3D"http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg"><filter id%3D"desaturate"><feColorMatrix type%3D"saturate" values%3D"0"%2F><%2Ffilter><%2Fsvg>#desaturate);
}
#filter2 {
filter:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxmaWx0ZXIgaWQ9ImRlc2F0dXJhdGUiPjxmZUNvbG9yTWF0cml4IHR5cGU9InNhdHVyYXRlIiB2YWx1ZXM9IjAiLz48L2ZpbHRlcj48L3N2Zz4%3D#desaturate);
}
</style>
</head>
<body>
<p style="color:red" id=filter1>Filter applied "as is"</p>
<p style="color:red" id=filter2>This one is encoded as base64</p>
</body>
</html>
现场演示http://martinezdelizarrondo.com/bugs/svgfilter.html
url() 的内容在两种情况下都是相同的:
<svg xmlns="http://www.w3.org/2000/svg"><filter id="desaturate"><feColorMatrix type="saturate" values="0"/></filter></svg>
使用http://software.hixie.ch/utilities/cgi/data/data编码
如您所见,第一个保持红色,但在第二种情况下,应用了 svg 过滤器并且文本变为灰色。
在第一种情况下我忘记了什么吗?
在这个错误中,我没有找到任何关于编码的信息,所以我想它应该是可能的(当然使用更简单的文本编码要好得多,而不是用 base64“加密”它)
谢谢