网站首页 > 开源技术 正文
说实话问题来的有点突然,只要我不使用svg图标,问题不是都解决了吗?
灵魂拷问:iconfont难道不香吗?
此事说来话长,长话短说就是:设计只认svg
「纯展示」最快最简单的办法就是插件:vue-svg-icon、svg-sprite-loader、vue-svgicon
「改变svg颜色」最简单的插件就是:svg-sprite-loader + svgo + svgo-loader
「vue-svg-icon」可显示、修改iconfont导出的svg文件;无法显示sketch导出的svg实现
「svg-sprite-loader」能正常显示svg文件,修改颜色需要搭配svgo使用
「vue-svgicon」未做尝试
安装依赖
npm install svg-sprite-loader svgo svgo-loader --save-dev
vue.config.js(vue-cli 3.0)增加webpack配置代码:
const path = require("path");
function resolve(dir) {
return path.join(__dirname, dir);
}
module.exports = {
chainWebpack: config => {
// 清除svg默认配置对./src/icons文件夹的处理
config.module
.rule("svg")
.exclude.add(resolve("src/assets/icons")) // icons存放地(svg放的地方)
.end()
// 添加新的rule处理./src/icons文件夹的svg文件
config.module
.rule("svg-sprite")
.test(/\.svg$/)
.include
.add(resolve("src/assets/icons"))
.end()
.use("svg-sprite-loader")
.loader("svg-sprite-loader")
.options({
symbolId: "icon-[name]",
include: ["src/assets/icons"]
})
.end()
.before("svg-sprite-loader")
.use("svgo-loader")
.loader("svgo-loader")
.options({
plugins: [
{removeAttrs: {attrs: "path:fill"}}
]
})
.end()
}
}
配置封装 svg 组件
- 在 components 创建组件 (/SvgIcon/index.vue)
<template>
<svg v-else :class="svgClass" aria-hidden="true" v-on="$listeners">
<use :xlink:href="iconName" />
</svg>
</template>
<script>
export default {
name: 'SvgIcon',
props: {
iconClass: {
type: String,
required: true
},
className: {
type: String,
default: ''
}
},
computed: {
iconName() {
return `#icon-${this.iconClass}`
},
svgClass() {
if (this.className) {
return 'svg-icon ' + this.className
} else {
return 'svg-icon'
}
},
styleExternalIcon() {
return {
mask: `url(${this.iconClass}) no-repeat 50% 50%`,
'-webkit-mask': `url(${this.iconClass}) no-repeat 50% 50%`
}
}
}
}
</script
- 配置引入组件(icons 目录下建立 index.js 文件)
import Vue from "vue";
import SvgIcon from "@/components/SvgIcon"; // svg component
// register globally
Vue.component("svg-icon", SvgIcon);
const req = require.context("./svg", false, /\.svg$/);
const requireAll = requireContext => requireContext.keys().map(requireContext);
requireAll(req)
引入 svg 配置文件(main 引入)
import "@/assets/icons";
使用
//在代码中使用
<svg-icon class="arrow_right" icon-class="rightArrow" />// 这里icon-class写的就是svg文件的名字
知其所以然
svg-sprite-loader :可以将多个 svg 打包成 svg-sprite
svgo:去除svg文件中的冗余信息
造成svg无法在页面中修改颜色的原因是,svg文件中path的属性fill设置了值,只有去除或为空才能正确使用color来设置颜色。
svg优势
- 支持多色图标了,不再受单色限制。
- 支持像字体那样通过font-size,color来调整样式。
- 支持 ie9+
- 可利用CSS实现动画。
- 减少HTTP请求。
- 矢量,缩放不失真
- 可以很精细的控制SVG图标的每一部分
- svg 是一个真正的矢量,不管你再怎么的放缩它都不会失真模糊
- 现在ui设计师平时都喜欢使用 sketch 来工作,只要轻松一键就能导出 svg 了,所以 svg 也更受设计师的青睐
- svg是一个文件,只要浏览器支持它就可以显示出来,icon-font使用@font-face可能碰到浏览器不支持某种字体
iconfont
优势
- 兼容性良好,支持ie8+
- 支持按字体的方式去动态调整图标大小,颜色等等
劣势
- 不支持多色图标
- 在不同的设备浏览器字体的渲染会略有差别,在不同的浏览器或系统中对文字的渲染不同,其显示的位置和大小可能会受到font-size、line-height、word-spacing等CSS属性的影响
- 使用font-class一定要注意命名空间的问题
- 上一篇: Web前端培训:前端开发必备工具—SVG优化器
- 下一篇: Canvas 从入门到劝朋友放弃(图解版)
猜你喜欢
- 2024-10-25 前端开发:JavaScript 资源大全(一)
- 2024-10-25 前端如何绘制svg格式图片?(svg html5)
- 2024-10-25 Canvas 从入门到劝朋友放弃(图解版)
- 2024-10-25 前端程序员如何转投SVG领域?(前端 转行)
- 2024-10-25 Web前端培训:前端开发必备工具—SVG优化器
- 2024-10-25 推荐一个C#操作SVG图形矢量图的开源项目
- 2024-10-25 细品用SVG实现一个优雅的提示框(svg标签怎么用)
- 2024-10-25 SVG在Web攻击中的应用(svg web)
- 2024-10-25 图形工具的另一种以光标为中心缩放实现
- 2024-10-25 React.js 项目实践——创建个人作品集网页
你 发表评论:
欢迎- 最近发表
-
- 6月游戏推荐(二)(6月份新出的游戏)
- 37【源码】数据可视化:基于 Echarts + Python 动态实时大屏
- Kubernetes Kube-Proxy 组件 IPVS 模式工作原理及常用故障排查
- 《茶余饭后顶级英文歌曲精选》(茶余饭后的经典句子)
- rainx和MediaTek携手推出101产品生态,为5G FWA提供创新
- KAPITAL 推出蓝染风格 Aloha Shirt 系列
- 欧美经典怀旧歌曲Free loop-管不住的音符
- Mac 下php5.3-7.0的二进制包 ── PHP-OS
- 如何把一个Python应用程序装进Docker
- 为何推荐 JsonTree.js 做 JSON 可视化?
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)