SVG图片以 https 链接的方式展示在页面上,并且可继承父类的颜色大小(类似阿里巴巴iconfont)

一、背景与问题

1. 背景

在前端的项目开发过程中,我们经常使用到 字体图标库(iconfont),以 ant dezign 为例。

如果在遇到图标库不存在的图标时,我们往往采用自定义图标的方式:

  • 引入自定义的svg图,作为component
    在这里插入图片描述
  • 但是并不是任何类型的svg都可继承父类的颜色与字体大小,需要设置svg的属性:width=“1em” height=“1em” fill=“currentColor”
    在这里插入图片描述

2. 问题

  • 当我们有此类需求时:导航的图标可配置,并且可以进行全栈换肤。
    在这里插入图片描述

  • 实现方式:

    为了实现全栈换肤,我们需要采用svg的形式来展示图标
    但是图标是我们上传到阿里云上后,把http链接 拿到后台配置出来的,于是
    在这里插入图片描述
    这个方式将失效。

二、解决方案(svg链接如何嵌入HTML,呈现出来)

1. 菜鸟教程提供了三种方案:(❌)

在这里插入图片描述
这种方式虽然可以展示出svg图片,却无法选中html元素 更改样式,达到换肤的效果。因为embed、object、iframe都是样式隔离的。
在这里插入图片描述

2. 直接使用<img src=xxx />标签,但这种方式也会面临上述问题。(❌)

3. 使用 element.innerHtml = 请求到的svg string,但此方法有XSS攻击安全隐患。(❌)

4. 使用background-color + mask-image。(✅)

mask-image: CSS属性用于设置元素上遮罩层的图像。

使用方式:
在这里插入图片描述
当我们为有颜色的背景图上加上遮罩层图像,即可展示出类似的效果,曲线救国用在这里再为合适不过了。
其实mask-image还有许多用处: CSS遮罩CSS3 mask/masks详细介绍,大家感兴趣可以去康康

三、写在最后

这个问题当时探索了好久才找到一个可实用的解决方案,记下来为大家塌塌坑。如果你有更好的解决方式,欢迎评论!
开发中总能遇到各种奇奇怪怪的问题,欢迎大家共享出自己遇到的奇葩问题,我们一起探讨。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值