当前位置: 首页 > wzjs >正文

网站建设哪家网站建设好国际网站建设与维护

网站建设哪家网站建设好,国际网站建设与维护,wordpress 网站根目录,雅茂道网站建设在前端项目开发中,SVG(可缩放矢量图形)凭借其无损缩放、体积小、可编辑性强等诸多优势,成为了处理图标(Icon)的热门选择。本文将为大家详细介绍几种在项目中处理 SVG 图作为 Icon 的有效方法。 用组件的方式…

在前端项目开发中,SVG(可缩放矢量图形)凭借其无损缩放、体积小、可编辑性强等诸多优势,成为了处理图标(Icon)的热门选择。本文将为大家详细介绍几种在项目中处理 SVG 图作为 Icon 的有效方法。

用组件的方式引入Svg将其作为Icon(vite-svg-loader)

vite-svg-loader不仅仅可以通过组件形式导入,还可以通过url、string的形式进行导入。

vite.config.js

import vue from '@vitejs/plugin-vue'
import SvgLoader from 'vite-svg-loader'export default defineConfig(({ mode }) => {const env = loadEnv(mode, process.cwd())return {base: env.VITE_APP_BASE_URL + '/',plugins: [vue(), svgLoader()]
})

 结合业务场景为svgLoader做一些额外配置

import vue from '@vitejs/plugin-vue'
import SvgLoader from 'vite-svg-loader'export default defineConfig(({ mode }) => {const env = loadEnv(mode, process.cwd())return {base: env.VITE_APP_BASE_URL + '/',plugins: [vue(), svgLoader({svgoConfig: {plugins: [{name: 'removeAttrs',// 保留这些属性,但不包括idparams: { attrs: '(data-name|class|style)' },},{// 使用 cleanupIds 插件但要小心配置以避免误删除或修改IDname: 'cleanupIds',params: {// 或者使用 minify: false 来禁用 minify 功能,以此保留原始 Ids,不追加的话,svgo会修改svg的id,svg的显示会互相影响minify: false,},},],},})]
})

 将svg图导出

icon
├── assets // 存放图片
│   └── table.svg
└── src // 抛出所有svg图└── index.ts

导出方式一: Icon会有代码提示

除了可以按组件的形式导出,还可以按Url的方式导出


// icon->src->index.ts
// 所有svg图都在此处追加
export { default as table } from '../assets/table.svg?component'
<template><div><table></table></div>
</template><script setup lang="ts">
import { table } from '@/components/icon'defineOptions({name: 'Icon',
})</script>

 导出方式二:这种方式导出的话,没有代码提示

const svgModules = import.meta.glob('../assets/*.svg', {eager: true,query: 'component',
})// 抛出一个对象,对象中的键名是文件名称,值是`svgModules` 中对应 `path` 的模块
const icons = Object.keys(svgModules).reduce((pre, path) => {const file = path.split('/')const fileName = file[file.length - 1].split('.')[0]pre[fileName] = svgModules[path]return pre
}, {} as any)export default icons
<template><div><table></table></div>
</template><script setup lang="ts">
import icons from '@/components/icon'const { table } = iconsdefineOptions({name: 'Icon',
})

 使用@iconify/vue插件

npm install --save-dev @iconify/vue

在线方式

<template><Icon icon="carbon:bot" />
</template><script setup lang="ts">
import { Icon } from '@iconify/vue'
</script><style scoped lang="scss"></style>

离线方式

默认Iconify是在线加载的,访问有可能不稳定,很多时候私有化部署不能加载外网数据,因此我们需要离线加载。因为Iconify是在线加载元数据,因此,我们可以改为本地自动引入。

导入整个数据集

整个导入图标集,会导致图标集里的图片全部被打包进assets的js文件中,dist文件会特别大。

npm install @iconify/vue @iconify/json
// main.ts
import { createApp } from 'vue';
import App from './App.vue';
import { Icon } from '@iconify/vue';
// 引入需要的图标集,这里以 Material Design Icons 为例
import materialDesignIcons from '@iconify/json/json/mdi.json';
import { addCollection } from '@iconify/core';// 添加图标集到 Iconify
addCollection(materialDesignIcons);const app = createApp(App);
app.component('Icon', Icon);
app.mount('#app');    

 app.vue

<template><div><!-- 使用 mdi 图标集中的图标 --><Icon icon="mdi:home" /></div>
</template><script setup>
// 无需额外导入,因为已经在 main.js 中全局注册
</script>    

按需加载方式 - 手动按需加载

npm install @iconify/vue全部数据
npm add -D @iconify/json部分数据(以Material Design Icons为例)
npm add -D @iconify-json/mdi图片按需加载工具
npm add -D unplugin-icons

tsconfig.json 

 "compilerOptions": {"types": ["unplugin-icons/types/vue"],}

 装Vite的图标自动引入插件

// vite.config.tsimport Icons from 'unplugin-icons/vite'  //图标按需加载工具export default defineConfig({plugins: [Icons(), //图标按需加载工具],
})

 

<script setup>
import IconAccessibility from '~icons/carbon/accessibility'
import IconAccountBox from '~icons/mdi/account-box'
</script><template><icon-accessibility/><icon-account-box style="font-size: 2em; color: red"/>
</template>

按需加载方式 - 自动按需加载

安装按需加载插件
npm add unplugin-vue-components -D
// vite.config.tsimport { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'//icon按需引入
import Icons from 'unplugin-icons/vite'
import IconsResolver from 'unplugin-icons/resolver'
import Components from 'unplugin-vue-components/vite'export default defineConfig({plugins: [vue(),Components({resolvers: [IconsResolver({prefix: 'icon'  // 更改图标前缀}),],}),Icons(),],
})

 在组件中使用

<template><! --使用icon--><icon-mdi-home />
</template><script setup>
</script>

参考内容

https://zhuanlan.zhihu.com/p/688842750

https://juejin.cn/post/7087827571861585956#heading-0

使用vite-plugin-svg-icons插件渲染svg类型的Icon

// svg-icon.vue组件
<template><svgaria-hidden="true"class="svg-icon":style="'width:' + width + ';height:' + height"><use :xlink:href="symbolId" :fill="color" /></svg>
</template><script setup lang="ts">
import { computed } from 'vue';const props = defineProps({prefix: {type: String,default: 'icon'},iconClass: {type: String,required: false},color: {type: String},width: {type: String,default: '12px'},height: {type: String,default: '12px'}
});const symbolId = computed(() => `#${props.prefix}-${props.iconClass}`);
</script><style scoped>
.svg-icon {vertical-align: -0.15em;overflow: hidden;fill: currentColor;
}
</style>
// vite.config.ts
import vue from "@vitejs/plugin-vue";
import path from "path";
import { UserConfig, ConfigEnv, loadEnv } from "vite";
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons';export default ({ mode }: ConfigEnv): UserConfig =>{// 获取.env环境配置const env = loadEnv(mode, process.cwd());return {base: env.VITE_APP_BASE+'/',plugins: [vue(),createSvgIconsPlugin({// 指定需要缓存的图标文件夹iconDirs: [path.resolve(process.cwd(), 'src/assets/icons')],// 指定symbolId格式symbolId: 'icon-[dir]-[name]'})],resolve: {// Vite路径别名配置alias: {'@': path.resolve('./src')}}}
};
// main.tsimport { createApp } from 'vue';
import App from './App.vue';
// 引入svg注册脚本
import 'virtual:svg-icons-register';
// 引入svg组件
import SvgIcon from '@/components/svg-icon/index.vue';const app = createApp(App);// 注册全局组件
app.component('svg-icon', SvgIcon)export default app;
<template><div class="bottom-bar"><!-- icon-class的值与src/assets/icons内的文件名相同 --><svg-icon icon-class="version"></svg-icon></div>
</template><script setup lang="ts">
</script><style lang="scss" scoped></style>


文章转载自:

http://Rmpb9GtR.djcbt.cn
http://kOHKqIpK.djcbt.cn
http://wJeqgxQa.djcbt.cn
http://XI9mqpVJ.djcbt.cn
http://cwkQ79Ow.djcbt.cn
http://K4J4GBPH.djcbt.cn
http://INzOSBeY.djcbt.cn
http://W9W0BU9b.djcbt.cn
http://BfLki3eI.djcbt.cn
http://BKqCXysx.djcbt.cn
http://cb740tAc.djcbt.cn
http://vrkFgs0M.djcbt.cn
http://nRb4Sx5R.djcbt.cn
http://SZD2SCLt.djcbt.cn
http://n4mDpK88.djcbt.cn
http://5O2xmrOl.djcbt.cn
http://8uhc0ZcH.djcbt.cn
http://4xgI6cL5.djcbt.cn
http://YmTZIWcf.djcbt.cn
http://GYo25vXg.djcbt.cn
http://xwjdjKwh.djcbt.cn
http://fu1cvZXn.djcbt.cn
http://eVuyqBm6.djcbt.cn
http://RWUrnyPX.djcbt.cn
http://7Fqu3fud.djcbt.cn
http://W5QOSWop.djcbt.cn
http://Iy7TgqBv.djcbt.cn
http://sMZY9tal.djcbt.cn
http://TegDf4gq.djcbt.cn
http://2cBkaNWY.djcbt.cn
http://www.dtcms.com/wzjs/665320.html

相关文章:

  • 推销网站建设具备哪些知识公司logo怎么注册
  • 阿里巴巴国际站入口百度小程序优化
  • 石家庄网站建设价格低广州好的网站设计公司
  • 非遗网站建设目的中国建设银行官方网站k宝驱动
  • wordpress两个站点共用用户国外设计素材app
  • 云服务器建立多个网站吗wordpress3.9.1下载
  • 全国建设交易信息网站宝安网站建设制作
  • 汽配公司的网站要怎么做医院网站设计模板
  • 网站开发工具 比较哪些网站可以做微信支付
  • 网站源码是什么格式深圳罗湖网站制作
  • html5 开发的网站彩票交易网站开发
  • 织梦网站安装出现404 not found个人博客网站页面
  • 网站策划的流程宝安设备网站设计
  • 一个网站怎么绑定很多个域名自己给公司做网站
  • 百度网站开发小程序制作开发加盟
  • 怎么用lofter做网站黄骅港务集团有限公司官网
  • 商水县住房城乡建设网站微信开发者工具文档
  • 房产网站建设产品字体设计网站大全
  • 深圳哪家公司需要网站建设的网站建设超市
  • lnmp wordpress 邮件网站排名seo软件
  • 给公司做一个网站吗北京网站建设公司价格
  • 外贸网站图片素材公司注册网站有什么好处
  • 十堰优化网站哪家好大型网站稳定性建设视频课程
  • 站酷设计网站怎样下载图片手机pc端浏览器
  • 模板做图 网站德清建设银行网站
  • 哪个网站的排行榜权威企业培训网站建设
  • 网站建设与规划工作网站开发综合实训记录周记
  • 乐清建网站网站如何做h5动态页面
  • 做网站注意哪方面wordpress 网站搬家
  • 网站服务器与虚拟主机演艺公司