type
status
date
summary
tags
category
icon
在当今屏幕差异越发大的时代,对图片的展示要求也越发高,对于一些小图标,SVG相对PNG、JPEG格式图标极具优势,因为在是矢量性图标,在任何分辨率的屏幕都能高保真展示。而且SVG的使用也越来越普遍了。那在Svelet项目中,又该如何使用SVG图标呢?
其实在所有前端项目中,使用SVG的方式无法就两种:
- 基于
img
的外链方式,使用形式为img src="svg url"
;
- 内联方式,也就是直接在html使用
svg
标签;
是不是有种很熟悉的感觉,对,就是和CSS的加载是一样的道理的模式,只不过标签变了。
所以在Svelet项目也是有这种的实现方式。
外链方式
外链方式其实是任何框架都是原生支持的,毕竟
img
标签是一个通用的html标签。如果引用的本地文件SVG文件,唯一的要求就是引用SVG文件能被部署到服务器,且构建时能正确替换对应的路径。当然如果是使用构建工具打包,例如Webpack、Vite等,都会有相关插件可以处理。使用方式也甚是简单,直接用 Svelet 官方的demo示例演示一下:
效果图为:
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F21edbce4-9945-408b-9a37-0c98388d0458%2FUntitled.png?table=block&id=c3445b76-700b-47f1-a9a4-d3c053223a60&t=c3445b76-700b-47f1-a9a4-d3c053223a60&width=2806&cache=v2)
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fcfc68218-5574-493b-9f49-03a26a66c1d7%2FUntitled.png?table=block&id=ba0cf863-6e8f-4198-9bdd-c8bba3e5e9fc&t=ba0cf863-6e8f-4198-9bdd-c8bba3e5e9fc&width=1288&cache=v2)
会被自动替换为svg的路径。
内联方式
内联方式比较有意思了,有好几个变种:
- 第一个是写
svg
标签:
效果为:
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Ffb857734-c730-4384-8193-5d0c6333b21d%2FUntitled.png?table=block&id=d951fc5f-a9eb-4821-8ef2-0847e4cfeb36&t=d951fc5f-a9eb-4821-8ef2-0847e4cfeb36&width=2802&cache=v2)
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F08cf9259-ff06-468b-9721-0b1ad2134800%2FUntitled.png?table=block&id=f5061c83-cad4-4c75-9270-7623be05680e&t=f5061c83-cad4-4c75-9270-7623be05680e&width=1246&cache=v2)
- 单独将SVG组件作为一个 Svelet组件
然后引用这个组件:
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F8048eb0d-bf21-4696-86f4-fb082a37b1ff%2FUntitled.png?table=block&id=a94ce039-d993-4b63-9936-05ce075ea448&t=a94ce039-d993-4b63-9936-05ce075ea448&width=1142&cache=v2)
展示效果如下
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F4ad02be1-8d45-48de-ad31-12a403795fd4%2FUntitled.png?table=block&id=ffce4d44-31c7-4971-8f3c-c3e686dc7cdf&t=ffce4d44-31c7-4971-8f3c-c3e686dc7cdf&width=420&cache=v2)
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fe2970ea7-df1e-44fa-acc6-86a18b43a486%2FUntitled.png?table=block&id=9170487f-bdb6-4b14-ba65-69af0cb8122b&t=9170487f-bdb6-4b14-ba65-69af0cb8122b&width=336&cache=v2)
- 使用
@html
标签渲染字符串方式,不推荐内部没法优化
实际Demo的中代码&效果如下:
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fcb937535-0628-434b-872b-666c963686b1%2FUntitled.png?table=block&id=bf2221d3-31f8-4b24-b5d4-c8086e991f0c&t=bf2221d3-31f8-4b24-b5d4-c8086e991f0c&width=1334&cache=v2)
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fd222b203-7be5-448b-8154-22af6e0a3be1%2FUntitled.png?table=block&id=175d7cd4-4963-46ac-8880-460f773535f5&t=175d7cd4-4963-46ac-8880-460f773535f5&width=288&cache=v2)
介绍了三种内联
SVG
图标的方式,最是推荐第二种组件形式,一是符合组件化的思路,可以最大可能的复用,其二是扩展性比较好,例如需要添加一些属性,可以定义一些props。总结
介绍了在Svelet项目中,两种使用SVG图标的姿势,一种是外链,另一种内联,其实也加载CSS、JS差不多一样的形式。外链方式是基于
img
标签,内联方式最终都是转换为 svg
标签,但写法有些不同,建议是单独抽象为组件形式,方便复用。