html中%3csvg%3e标签作用,CSS中的内联SVG

对于仍在苦苦挣扎的人来说,我设法让所有现代浏览器IE11及以上版本都能正常运行。

base64对我来说没有选择,因为我想使用SASS根据任何给定的颜色生成SVG图标。例如:@include svg_icon(heart, #FF0000);这样我就可以用任何颜色创建一个特定的图标,只需要在CSS中嵌入一次SVG形状。(使用base64,你必须在你想要使用的每种颜色中嵌入SVG)

您需要注意三件事:

URL包含您的SVG 正如其他人所建议的那样,您需要对整个SVG字符串进行URL编码,以使其在IE11中工作。在我的情况下,我在诸如fill="#00FF00"和之类的字段中省略了颜色值,stroke="#FF0000"并用SASS变量替换它们,fill="#{$color-rgb}"因此可以用我想要的颜色替换它们。您可以使用任何在线转换器对字符串的其余部分进行URL编码。你最终得到一个像这样的SVG字符串:

%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%20494.572%20494.572%27%20width%3D%27512%27%20height%3D %27512%27%3E%0A%20%20%3Cpath%20D%3D%27M257.063%200C127.136%200%2021.808%20105.33%2021.808%20235.266c0%2041.012 2010.535%%2079.541 2028.973%%20113.104L3.825 %20464.586c345%2012.797%2041.813%2012.797%2015.467%200%2029.872-4.721%2041.813-12.797v158.184z%27%20fill%3D%27#{$ color-rgb}%27%2F%3E%3C%2Fsvg% 3E

在数据URL中使用UTF8 CHARSET在创建数据URL时,您需要省略其在IE11中工作的字符集。

NOT background-image:url(data:image / svg + xml; utf-8,%3Csvg%2 ....)

但是 background-image:url(数据:image / svg + xml,%3Csvg%2 ... 。)

使用RGB()INSTEAD OF HEX颜色 Firefox不喜欢SVG代码中的#。因此,您需要将RGB颜色十六进制值替换为RGB值。

NOT fill =“#FF0000”

但是填充=“rgb(255,0,0)”

在我的例子中,我使用SASS将给定的十六进制转换为有效的rgb值。正如评论中指出的那样,最好对您的RGB字符串进行URL编码(因此逗号变为%2C)

@mixin svg_icon($id, $color) {

$color-rgb: "rgb(" + red($color) + "%2C" + green($color) + "%2C" + blue($color) + ")";

@if $id == heart {

background-image: url('data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%20494.572%20494.572%27%20width%3D%27512%27%20height%3D%27512%27%3E%0A%20%20%3Cpath%20d%3D%27M257.063%200C127.136%200%2021.808%20105.33%2021.808%20235.266c0%204%27%20fill%3D%27#{$color-rgb}%27%2F%3E%3C%2Fsvg%3E');

}

}

我意识到这对于非常复杂的SVG来说可能不是最好的解决方案(内联SVG从来就不是这种情况),但对于只有几种颜色的平面图标,这真的很棒。

我能够省略一个完整的精灵位图,并在我的CSS中用内联SVG替换它,压缩后结果只有25kb左右。因此,这是限制网站必须执行的请求数量的好方法,而不会使CSS文件膨胀。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值