- Published on
svg icon 在前端项目中的应用
svg(可伸缩矢量图)已经被各大浏览器支持。它具有如下几个特点
- 可以无限放大,完美解决高分率屏幕下图像显示不清楚的问题
- 图形线条比较简单的情况下,svg要比高清图要小
- svg比相应的高清图有更好的渲染性能。

在一般的前端项目中,图标这类比较简单,比较小的文件一般都是用 svg 来制作的。通过在上设置 fill 属性的颜色就可以改变图标的颜色。
<svg fill="#fff">
<path></path>
</svg>
// 或者是
svg{
fill: white;
}
或者直接当成一张图片使用
<img src="../assets/book.svg"/>
body{
background-image: url('./svg/assets/book.svg')
}
在webpack中处理svg
一般将svg格式的文件当作图片来处理,其处理规则同png,jpg文件一样
{
test: /\.(svg|png|jpg)/ ,
use: [
{
loader: 'url-loader',
options: { limit: 1000 }
}
]
}
但是如果是用作图标的svg,我们更希望它能够拥有sprite 精灵的功能,同时又能够保留完整的svg特性,诸如设置svg的fill属性来达到变色的效果。这时候就可以使用svg-sprite-loader。
{
test: /\.svg/ ,
use: [
{
loader: 'svg-sprite-loader',
options: { symbolId: 'icon-[name]' }
}
]
}
name是interpolate name的一部分。
它的原理是将所有引入的svg都集中渲染在页面上,并且给每个symbol 加上id,通过 id 的方式在页面上使用。

此时,我们就可以在页面中这样子使用
<svg fill="red">
<use xlink:href="icon-avater"></use>
</svg>