You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
import { Icon } from 'antd';
import MessageSvg from 'path/to/message.svg'; // path to your '*.svg' file.
ReactDOM.render(<Icon component={MessageSvg} />, mountNode);
对于带颜色的图标,loader 并不知道 svg 上哪个颜色是需要自定义的,所以需要手动将 svg 中写死的 color 值改成currentColor 。
虽然 antd 提供了大量的 Icon 图标,但是在平时的设计稿中,会出现各种设计师自定义的 Icon,对于这类图标,怎样处理更好呢?
多种方法
直接当做图片使用
svg 也是一种图片,可以作为
img
的src
使用。通过配置
url-loader
的配置,我们可以直接引用 svg 资源。优劣
color
,font-size
等。自定义 font 图标
在 antd v3.9.0 之后,提供了一个
createFromIconfontCN
方法,方便开发者调用在 iconfont.cn 上自行管理的图标。首先你需要在 iconfont 上创建自己的图标库,并上传自定义的 Icon,然后就可以通过自定义组件使用了。
iconfont 图标库
iconfont 上新建图标库比较简单,我就不赘述了。我讲一下在上传自定义 Icon 时的几个坑。
Q:自定义 SVG 上传后,显示为空白。
如果 SVG 图标不是封闭的,上传到 iconfont 之后,会显示为空白。那什么是封闭呢?大概就是图标有缺口~
比如下面的线条就是非封闭的,上传到 iconfont 就变成空白了。
我们只需要选中该图标,进行“轮廓化”处理即可。
Q:自定义 SVG 上传后,图标显示不全。
如果 SVG 图标由多个部分组成,但是没有进行“轮廓化”,那上传到 iconfont 之后,可能会显示不全。比如下图的图标,上传到 iconfont 后,图标显示不全了。
我们选中该图标多个部分,进行“轮廓化”即可。
**Q:自定义 SVG 上传后,无法通过
color
属性设置颜色。我们从 sketch 导出的 svg,一般都是自带颜色的,我们在上传时,选择去除颜色并提交即可。
自定义 MyIcon 组件
经过上面的步骤,我们已经把需要的 Icon 上传到 iconfont 了,同时我们可以拿到字体的链接。
然后通过 antd 的
createFromIconfontCN
包装下即可使用。优劣
自定义 SVG 图标
通过 svgr 我们可以将一个普通的 svg 图片,转成 React 组件。
参见官方文档
对于带颜色的图标,loader 并不知道 svg 上哪个颜色是需要自定义的,所以需要手动将 svg 中写死的 color 值改成
currentColor
。优劣
通过 cli 将 SVG 转成组件
svgr 可以通过 cli,将 SVG 转换为组件,同时可以将 svg 中的颜色,设置成变量。
正常情况下,我们导出的 SVG 长这样:
通过 svgr 的命令行尝试转一下:
输出结果为:
good job~ 现在我们获得了一个纯 React 组件,直接使用即可。
优劣
总结
上面的几种方案我有在多个项目中尝试过,目前觉得 通过 webpack 将 SVG 转成组件 方案不错。
color
,font-size
等属性控制样式。❤️感谢大家
关注公众号「前端技术砖家」,拉你进交流群,大家一起共同交流和进步。
The text was updated successfully, but these errors were encountered: