Vue项目使用svg图标实践

yizhihongxing

Vue项目使用SVG图标实践

本文主要介绍在Vue项目中如何使用SVG图标,并提供两个示例说明。

集成SVG图标

  • 安装svg-sprite-loader

svg-sprite-loader将svg文件打包成单个svg sprite,该svg sprite可以通过样式或相关API的方式在您的应用程序中使用。

npm install svg-sprite-loader --save-dev
  • 配置webpack

在 webpack.config.js 添加如下代码:

module.exports = {
  module: {
    rules: [
      {
        test: /\.svg$/,
        loader: 'svg-sprite-loader',
        options: {
          // 配置svg-sprite-loader
          symbolId: 'icon-[name]',
        },
      },
    ],
  },
};

添加完毕后,打开 .vue 文件,使用以下代码导入并使用svg图标。

<template>
  <div>
    <svg class="icon">
      <use xlink:href="#icon-svg"></use>
    </svg>
  </div>
</template>

<script>
export default {
  name: 'svg-icon',
  props: {
    iconClass: {
      type: String,
    },
  },
};
</script>

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

示例

示例一:使用已有的svg图片

在项目中使用已经存在的SVG图片,此示例使用的SVG图标在public文件夹的img目录中。

  • 项目结构
|-- public
    |-- img
        |-- icon.svg
|-- src
    |-- views
        |-- Home.vue
  • Home.vue 文件
<template>
  <div class="home">
    <svg-icon class="heart-icon" icon-class="heart"></svg-icon>
  </div>
</template>

<script>
import SvgIcon from "@/components/SvgIcon.vue";

export default {
  components: {
    SvgIcon,
  },
};
</script>

<style scoped>
.heart-icon {
  width: 30px;
  height: 30px;
}
</style>
  • SvgIcon.vue 文件
<template>
  <svg class="svg-icon" aria-hidden="true" v-on="$listeners">
    <use :xlink:href="`#icon-${iconClass}`" />
  </svg>
</template>

<script>
export default {
  name: "SvgIcon",
  props: {
    iconClass: {
      type: String,
      required: true,
    },
  },
};
</script>

<style scoped>
.svg-icon {
  width: 1em;
  height: 1em;
  vertical-align: -0.15em;
  fill: currentColor;
  overflow: hidden;
}
</style>
  • webpack.config.js 文件
const path = require("path");

function resolve(dir) {
  return path.join(__dirname, dir);
}

module.exports = {
  chainWebpack: (config) => {
    const svgRule = config.module.rule("svg");
    svgRule.uses.clear();
    svgRule.exclude.add(resolve("src/icons"));
    svgRule.include.add(resolve("public/img"));
    svgRule
      .test(/\.svg$/)
      .use("svg-sprite-loader")
      .loader("svg-sprite-loader")
      .options({
        symbolId: "icon-[name]",
      });
  },
};

示例二:自定义SVG图标

使用iconfont自定义图标,步骤如下:

  1. 登录 iconfont
  2. 新建项目,并添加图标
  3. 在项目中下载SVG文件

  4. 项目结构

|-- src
    |-- icons
        |-- svg
            |-- custom-svg.svg
    |-- views
        |-- Home.vue
  • custom-svg.svg

上传至icons/svg文件夹中,该文件将被作为自定义SVG图标文件。

  • Home.vue 文件
<template>
  <div class="home">
    <svg-icon class="phone-icon" icon-class="custom-svg"></svg-icon>
  </div>
</template>

<script>
import SvgIcon from "@/components/SvgIcon.vue";

export default {
  components: {
    SvgIcon,
  },
};
</script>

<style scoped>
.phone-icon {
  width: 30px;
  height: 30px;
}
</style>
  • SvgIcon.vue 文件
<template>
  <svg class="svg-icon" aria-hidden="true" v-on="$listeners">
    <use :xlink:href="`#icon-${iconClass}`" />
  </svg>
</template>

<script>
export default {
  name: "SvgIcon",
  props: {
    iconClass: {
      type: String,
      required: true,
    },
  },
};
</script>

<style scoped>
.svg-icon {
  width: 1em;
  height: 1em;
  vertical-align: -0.15em;
  fill: currentColor;
  overflow: hidden;
}
</style>
  • webpack.config.js 文件

vue.config.js中,添加如下代码:

module.exports = {
  chainWebpack: (config) => {
    const svgRule = config.module.rule("svg");
    svgRule.uses.clear();
    svgRule.exclude.add(resolve("src/icons/svg"));
    svgRule.include.add(resolve("src/icons/svg"));
    svgRule
      .test(/\.svg$/)
      .use("svg-sprite-loader")
      .loader("svg-sprite-loader")
      .options({
        symbolId: "icon-[name]",
      });
  },
};

总结

使用SVG图标,可以使网站在任何分辨率下都拥有出色的图形,而且不会失帧或失去其矢量几何图形。本文介绍了在Vue项目中集成SVG图标的步骤,并提供了两个示例,希望对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue项目使用svg图标实践 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • vue3+ts数组去重方及reactive/ref响应式显示流程分析

    题目分为两部分,下面我将分别讲解。 vue3+ts数组去重方案 数组去重在前端开发中是一个常见的需求,Vue3 和 TypeScript 结合使用时,一个简单且通用的去重方案是通过 Set 对象实现。 具体步骤如下: 首先,定义一个数组。 const arr: Array<number> = [1, 2, 2, 3, 4, 4, 5, 5, 6]…

    Vue 2023年5月28日
    00
  • vue 过滤器和自定义指令的使用

    当我们在使用 Vue.js 构建应用程序时,我们有时需要对数据进行格式化或者在 DOM 元素上添加特殊功能。这时,Vue.js 提供了两种方案:过滤器和自定义指令。 Vue 过滤器 过滤器是应用于文本转换的 Vue 函数。它们可以用于一些常见的文本格式化任务,例如通过将字符串转换为大写或小写。 全局过滤器 我们可以使用 Vue.filter() 方法创建一个…

    Vue 2023年5月27日
    00
  • 详解vue-cli3多页应用改造

    针对”详解vue-cli3多页应用改造”,我们需要掌握以下几个方面: Vue-cli3多页应用的原理和基本配置 多页应用架构演变及其对应实现(如何从单页应用改造为多页应用) 懒加载和代码分割的原理和应用 多语言和国际化的实现方式 基于Vuex的SPA应用改造为多页应用的实践 下面我们来详细讲解一下这个完整攻略吧: 一、Vue-cli3多页应用的原理和基本配置…

    Vue 2023年5月28日
    00
  • vue2.0开发入门笔记之.vue文件的生成和使用

    当我们使用 Vue.js 进行开发的时候,最普遍的方式就是通过 .vue 文件进行组件化开发。本次攻略将详细讲解 .vue 文件的生成和使用。 什么是 .vue 文件? .vue 文件是一种组件化的文件格式,Vue.js 是通过 .vue 文件进行组件开发。.vue 文件将一个组件的 HTML、CSS 和 JavaScript 内容放在同一个文件中,便于管理…

    Vue 2023年5月28日
    00
  • node+vue实现文件上传功能

    下面我将为您详细讲解“node+vue实现文件上传功能”的完整攻略。 技术实现方案 实现文件上传功能需要前后端协同完成,一般采用以下技术方案: 前端:Vue + element-ui 后端:Node.js + Express 存储:阿里云 OSS 或者本地文件系统 前端实现 准备工作 1.在项目中引入 element-ui 和 axios npm insta…

    Vue 2023年5月28日
    00
  • Mock.js的安装与使用教程(摆脱后端同学的束缚)

    下面我会详细讲解”Mock.js的安装与使用教程(摆脱后端同学的束缚)”的完整攻略。 1. 简介 Mock.js是一个模拟数据生成器,可以用于前端开发中的接口测试、调试和前后端分离开发。Mock.js提供了丰富的数据类型、生成规则,可以生成符合规范的模拟数据,简化前端开发流程,提高开发效率。 2. 安装 2.1 npm安装 Mock.js是一个npm包,可以…

    Vue 2023年5月28日
    00
  • 分析总结20道Vue高频面试题

    下面我将详细讲解“分析总结20道Vue高频面试题”的完整攻略。 一、了解Vue 在面试前,必须要对Vue的基本概念有所了解,包括数据双向绑定、组件化、生命周期等。我们可以通过查阅官方文档或者一些Vue相关的博客、教程来深入学习Vue。 二、掌握Vue核心思想 Vue的核心思想有两个:响应式数据和组件系统。了解这两个思想能够让我们更好地理解和应对Vue相关的问…

    Vue 2023年5月27日
    00
  • 在vue中对数组值变化的监听与重新响应渲染操作

    在Vue中监听和重新响应渲染数组的变化操作主要是通过Vue提供的Array原型方法进行实现,下面是详细步骤: 步骤一:在vue组件中定义数组 在Vue的组件中,需要先定义要监听的数组,可以在data()中定义一个数组类型的变量,例如: data() { return { list: ["apple", "banana"…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部