css – 没有base64编码的Stylus内联SVG数据uri

如何在没有SVG进行Base64编码的情况下使用 Stylus预处理器将SVG数据uri嵌入到CSS中?

像这样:

background: url('data:image/svg+xml;utf8,<svg>[...]</svg>');

而不是这个:

background: url('data:image/svg+xml;base64,PD94bWwg[...]');

Normaly我使用stylus.url()来嵌入图像,但它也会使用Base64编码SVG.

我想使用数据uris而不是外部文件来保存文件请求.我已经意识到Base64编码SVG实际上增加了字节而不是减小大小.

我找不到按原样嵌入SVG的方法.

解决方法

由于我找不到既定的方法来做到这一点,我不得不自己解决.我编写了一个包含stylus.url()的简单节点模块,但是替换了SVG内联的方式.

链接到模块:https://www.npmjs.com/package/stylus-inline-svg

除了一些检查,它基本上这样做:

found = stylus.utils.lookup(url.string,options.paths);

if(!found) return literal;

buf = fs.readFileSync(found);

buf = String(buf)
    .replace(/<\?xml(.+?)\?>/,'')
    .replace(/^\s+|\s+$/g,'')
    .replace(/(\r\n|\n|\r)/gm,'');

return new stylus.nodes.Literal("url('data:image/svg+xml;utf8," + buf + "')");

相关文章

css的bordercolor属性怎么使用
CSS中contain属性的作用和语法
深入学习响应式布局框架:适合初学者到专家的详尽指南
CSS3选择器优先级规则
margin-top用法
选择最适合您的响应式布局框架:综合评估不同工具