searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

vue3使用svg图标

2024-12-16 09:15:28
20
0

背景

在实际的工作中,设计师通常会将UI稿上传到蓝湖等协作平台,那么我们如何使用设计师UI稿中的图标呢?对于png,jpg等格式使用,我就不多说了。因为svg图标尺寸更小,且是可伸缩的,得到了广大开发者的钦赖。这里主要讲述下如何使用svg格式的图标,如果有问题,请大家指正。

下载svg图标

在蓝湖或其他协作平台下载图标时,支持不同格式的选择,选择svg格式,下载切图。

使用svg图标

1.新建svg文件夹,例如:src/assets/icons/svg,将svg图标放到该目录下。

2.下载插件

npm install vite-plugin-svg-icons -D

3.在vite.config.ts中新增如下配置

import {createSvgIconsPlugin} from 'vite-plugin-svg-icons'
export default ({ mode, command }: { mode: any, command:any }) => {
  return defineConfig({
    plugins: [vue(), 
      vueJsx(),
      //引入SVG图标素材文件
      createSvgIconsPlugin({
        iconDirs: [path.resolve(process.cwd(), 'src/assets/icons/svg')],
        symbolId: 'icon-[dir]-[name]',
        svgoOptions: {
          plugins: [
            {
              name: 'removeAttrs',
              params: { attrs: ['fill'] }
            }
          ]
        },
      }),
    ],
  })
}

4.在main.ts中新增

import 'virtual:svg-icons-register'

5.新建组件SvgIcon.vue。

<template>
  <svg :class="svgClass" aria-hidden="true">
    <use :xlink:href="iconName"></use>
  </svg>
</template>

 

<script lang="ts" setup>
import { computed } from 'vue'
const props = defineProps({
  iconClass: {
    type: String,
    required: true
  },
  className: {
    type: String
  }
})
const iconName = computed(() => {
  return `#icon-${props.iconClass}`
})
const svgClass = computed(() => {
  if (props.className) {
    return 'svg-icon ' + props.className
  } else {
    return 'svg-icon'
  }
})
</script>

<style lang="scss">
.svg-icon {
  width: 1em;
  height: 1em;
  vertical-align: -0.15em;
  fill: currentColor;
  overflow: hidden;
}
</style>


6.在项目中引入,iconClass传入的名称为svg文件夹中svg的图标名称。

<svg-icon iconClass="test_svg" className="icon" />

补充

在使用svg图标的时候,如果想改变图标线条的粗细,可以修改.svg文件的stroke-width属性,该属性可以设置成小数或者整数。


来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
0条评论
0 / 1000
w****n
14文章数
0粉丝数
w****n
14 文章 | 0 粉丝
原创

vue3使用svg图标

2024-12-16 09:15:28
20
0

背景

在实际的工作中,设计师通常会将UI稿上传到蓝湖等协作平台,那么我们如何使用设计师UI稿中的图标呢?对于png,jpg等格式使用,我就不多说了。因为svg图标尺寸更小,且是可伸缩的,得到了广大开发者的钦赖。这里主要讲述下如何使用svg格式的图标,如果有问题,请大家指正。

下载svg图标

在蓝湖或其他协作平台下载图标时,支持不同格式的选择,选择svg格式,下载切图。

使用svg图标

1.新建svg文件夹,例如:src/assets/icons/svg,将svg图标放到该目录下。

2.下载插件

npm install vite-plugin-svg-icons -D

3.在vite.config.ts中新增如下配置

import {createSvgIconsPlugin} from 'vite-plugin-svg-icons'
export default ({ mode, command }: { mode: any, command:any }) => {
  return defineConfig({
    plugins: [vue(), 
      vueJsx(),
      //引入SVG图标素材文件
      createSvgIconsPlugin({
        iconDirs: [path.resolve(process.cwd(), 'src/assets/icons/svg')],
        symbolId: 'icon-[dir]-[name]',
        svgoOptions: {
          plugins: [
            {
              name: 'removeAttrs',
              params: { attrs: ['fill'] }
            }
          ]
        },
      }),
    ],
  })
}

4.在main.ts中新增

import 'virtual:svg-icons-register'

5.新建组件SvgIcon.vue。

<template>
  <svg :class="svgClass" aria-hidden="true">
    <use :xlink:href="iconName"></use>
  </svg>
</template>

 

<script lang="ts" setup>
import { computed } from 'vue'
const props = defineProps({
  iconClass: {
    type: String,
    required: true
  },
  className: {
    type: String
  }
})
const iconName = computed(() => {
  return `#icon-${props.iconClass}`
})
const svgClass = computed(() => {
  if (props.className) {
    return 'svg-icon ' + props.className
  } else {
    return 'svg-icon'
  }
})
</script>

<style lang="scss">
.svg-icon {
  width: 1em;
  height: 1em;
  vertical-align: -0.15em;
  fill: currentColor;
  overflow: hidden;
}
</style>


6.在项目中引入,iconClass传入的名称为svg文件夹中svg的图标名称。

<svg-icon iconClass="test_svg" className="icon" />

补充

在使用svg图标的时候,如果想改变图标线条的粗细,可以修改.svg文件的stroke-width属性,该属性可以设置成小数或者整数。


来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
文章来自个人专栏
前端开发成长之路
14 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0