在设计稿中我们经常能见到同一种图标不同颜色,如果直接使用IMG标签插入SVG文件的话是没有办法修改颜色的,就要保存多个SVG文件来显示不同颜色。
在react中把SVG文件转换成组件,使用CSS修改SVG颜色。只需加载一个SVG文件,就可以通过CSS展示多种颜色。从而实现减少包体积、减少静态资源请求。
在react中插入SVG
首先安装插件vite-plugin-svgr
1# npm
2npm install --save-dev vite-plugin-svgr
3
4# yarn
5yarn add -D vite-plugin-svgr
6
7# pnpm
8pnpm add -D vite-plugin-svgr
修改 vite.config.ts
配置:
1import svgr from "vite-plugin-svgr";
2
3export default {
4
5 plugins: [
6
7 svgr({
8 svgrOptions: {
9 icon: true,
10 },
11 include: "**/*.svg?react",
12 }),
13 ],
14};
调用
1import AddressIcon from '@/assets/address.svg?react';
2import address from '@/assets/address.svg';
3
4
5function Home() {
6 return (
7 <>
8 <img src={address}/>
9 <AddressIcon className="addressIcon"/>
10 </>
11 );
12}
13export default Home;
14
控制台
接下来你就可以使用CSS来处理你的svg文件了
在调用过程中如果遇到这个报错:
Failed to execute ‘createElement’ on ‘Document’: The tag name provided (‘/src/assets/svg/xxx.svg’) is not a valid name.
应该就是你遗漏了?react
后缀
为什么使用SVG
在为网站和其他数字媒体创建图像时,哪种文件格式会给你带来最佳效果? 你需要考虑速度与图像质量和规模。让我们深入了解每种图像格式的优缺点。
SVG是可缩放矢量图形。它非常实用,适用于除照片之外的任何类型的图像。这就是设计师更频繁地使用它的原因。
SVG是一种无损格式。这意味着它在压缩时不会丢失任何数据,呈现不同的颜色。最常用于网络上的图形和LOGO以及将在视网膜或其他高分辨率屏幕上查看的项目。
SVG的优点
矢量格式可呈现任何大小而不降低其质量
能够在代码或文本编辑器中创建简单的SVG渲染
从Adobe Illustrator或Sketch设计可导出复杂图形或者是草图
可以访问SVG文本
SVG很容易设计风格和脚本
现代浏览器支持SVG格式,并且面向未来
格式具有高度可压缩性和轻量级
由于基于文本的格式,因此适合搜索
支持透明度
允许静止或动态图像
个人笔记记录 2021 ~ 2025