最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在Vue中引入SVG圖標(biāo)的多種實(shí)現(xiàn)方案

 更新時(shí)間:2025年07月11日 10:47:27   作者:前端微白  
SVG圖標(biāo)集錦是一個(gè)豐富的資源庫,包含了多個(gè)知名圖標(biāo)的集合,如bootstrap、feather、iconpark、ikonate和ionicons等,這些圖標(biāo)是為網(wǎng)頁開發(fā)設(shè)計(jì)的,具有高質(zhì)量和高度可定制性,在 Vue 項(xiàng)目中優(yōu)雅地引入 SVG 圖標(biāo)可通過多種方案實(shí)現(xiàn),下面小編給大家詳細(xì)說說

SVG 圖標(biāo)因其矢量特性、高清晰度及樣式易定制等優(yōu)勢(shì),已成為現(xiàn)代 Web 開發(fā)的首選。在 Vue 項(xiàng)目中優(yōu)雅地引入 SVG 圖標(biāo)可通過多種方案實(shí)現(xiàn),下面將詳細(xì)解析四種主流方案。

方案一:直接通過 <img> 引入(基礎(chǔ)版)

適用于簡(jiǎn)單場(chǎng)景,但無法動(dòng)態(tài)修改樣式。

<template>
  <img src="@/assets/icons/home.svg" alt="首頁" width="24" height="24">
</template>
  • 優(yōu)點(diǎn):簡(jiǎn)單快捷
  • 缺點(diǎn):無法通過 CSS 修改顏色/樣式;多次使用產(chǎn)生額外 HTTP 請(qǐng)求。

方案二:使用 vue-svg-loader(轉(zhuǎn)為 Vue 組件)

將 SVG 轉(zhuǎn)換為可復(fù)用的 Vue 組件。

步驟:

  1. 安裝 loader
npm install vue-svg-loader svgo-loader --save-dev
# 或
yarn add vue-svg-loader svgo-loader -D
  1. 配置 vue.config.js
module.exports = {
  chainWebpack: (config) => {
    config.module
      .rule('svg')
      .exclude.add(resolve('src/icons')) // 排除原文件夾處理規(guī)則
      .end();

    config.module
      .rule('icons')
      .test(/\.svg$/)
      .include.add(resolve('src/icons')) // 指定 SVG 目錄
      .end()
      .use('vue-svg-loader')
      .loader('vue-svg-loader')
      .options({ 
        svgo: { plugins: [{ removeViewBox: false }] } // 保留 viewBox 屬性
      });
  }
};
  1. 組件中使用
<template>
  <HomeIcon class="icon" />
</template>

<script>
import HomeIcon from '@/icons/home.svg';

export default {
  components: { HomeIcon }
}
</script>

<style scoped>
.icon {
  fill: #42b983; /* 直接修改填充色 */
  transition: fill 0.3s;
}
.icon:hover {
  fill: #ff7e67;
}
</style>
  • 優(yōu)點(diǎn):完全支持 Vue 響應(yīng)式樣式
  • 缺點(diǎn):每個(gè)圖標(biāo)需單獨(dú)引入

方案三:使用 svg-sprite-loader(雪碧圖方案)

合并所有 SVG 為單個(gè)雪碧圖,通過 <use> 引用。

步驟:

  1. 安裝依賴
npm install svg-sprite-loader --save-dev
  1. 配置 vue.config.js
module.exports = {
  chainWebpack: (config) => {
    // 默認(rèn) SVG 規(guī)則排除 icons 目錄
    config.module
      .rule('svg')
      .exclude.add(path.resolve(__dirname, 'src/icons'))
      .end();

    // 添加 icons 目錄專屬規(guī)則
    config.module
      .rule('icons')
      .test(/\.svg$/)
      .include.add(path.resolve(__dirname, 'src/icons'))
      .end()
      .use('svg-sprite-loader')
      .loader('svg-sprite-loader')
      .options({ symbolId: 'icon-[name]' }); // symbolId 命名規(guī)則
  }
};
  1. 創(chuàng)建全局組件 SvgIcon.vue
<template>
  <svg :class="className" aria-hidden="true">
    <use :xlink:href="`#icon-${name}`" rel="external nofollow"  />
  </svg>
</template>

<script>
export default {
  props: {
    name: { type: String, required: true },  // SVG 文件名
    className: String                       // 自定義樣式類
  }
};
</script>
  1. 在入口文件(如 main.js)自動(dòng)導(dǎo)入所有 SVG
const req = require.context('./icons', false, /\.svg$/);
req.keys().map(req);
  1. 組件中使用
<template>
  <SvgIcon name="home" class="custom-class" />
</template>

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

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

方案四:使用 unplugin-icons(自動(dòng)化最優(yōu)解)

基于按需導(dǎo)入的現(xiàn)代解決方案,無需手動(dòng)管理 SVG 文件。

步驟:

  1. 安裝依賴
npm install -D unplugin-icons @iconify/json
# 或
yarn add -D unplugin-icons @iconify/json
  1. 配置 vite.config.js / vue.config.js
// Vite 配置 (vite.config.js)
import Icons from 'unplugin-icons/vite';

export default {
  plugins: [
    Vue(), 
    Icons({ compiler: 'vue3' }) // 'vue2' for Vue 2
  ]
};
  1. 在組件中直接使用(按需導(dǎo)入)
<template>
  <div>
    <!-- 直接使用 Iconify 圖標(biāo)名 -->
    <Icon icon="mdi:home" width="24" />
    
    <!-- 使用本地 SVG -->
    <Icon icon="custom:home" :path="customSvgPath" />
  </div>
</template>

<script setup>
import { Icon } from '@iconify/vue';

// 本地 SVG 示例
const customSvgPath = `
  <path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/> 
`;
</script>
  1. 動(dòng)態(tài)修改樣式
<template>
  <Icon icon="mdi:email" class="icon-style" />
</template>

<style>
.icon-style {
  color: #3498db;  /* 修改顏色 */
  font-size: 2em;  /* 調(diào)整大小 */
  transition: all 0.3s;
}
.icon-style:hover {
  color: #e74c3c;
  transform: rotate(15deg);
}
</style>

核心優(yōu)勢(shì)

  • 按需自動(dòng)加載(無多余代碼)
  • 支持 10,000+ 開源 Iconify 圖標(biāo)集
  • 本地/遠(yuǎn)程 SVG 統(tǒng)一管理
  • 極致開發(fā)體驗(yàn)(HMR 熱更新)

各方案對(duì)比表

方案按需加載樣式控制維護(hù)成本適用場(chǎng)景
<img> 標(biāo)簽??★☆☆☆☆簡(jiǎn)單靜態(tài)場(chǎng)景
vue-svg-loader部分?★★★☆☆少量自定義圖標(biāo)
svg-sprite-loader??★★★★☆中大型項(xiàng)目
unplugin-icons??★★★★★現(xiàn)代化項(xiàng)目首選方案

最佳實(shí)踐建議

  1. 小型項(xiàng)目 → 使用 vue-svg-loader 快速起步
  2. 中大型項(xiàng)目 → 采用 svg-sprite-loaderunplugin-icons
  3. 圖標(biāo)庫依賴 → 優(yōu)先選擇 unplugin-icons + Iconify 生態(tài)
  4. 性能優(yōu)化
    • 使用 SVGO 壓縮 SVG(在線工具
    • 通過 ?raw 避免 URL 編碼問題(Vite)
    • 動(dòng)態(tài)加載非核心圖標(biāo)(import() + 骨架屏)

以上就是在Vue中引入SVG圖標(biāo)的多種實(shí)現(xiàn)方案的詳細(xì)內(nèi)容,更多關(guān)于Vue引入SVG圖標(biāo)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vue移動(dòng)端屏幕適配詳解

    vue移動(dòng)端屏幕適配詳解

    這篇文章主要介紹了vue移動(dòng)端屏幕適配,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • TypeError:res.forEach?is?not?a?function報(bào)錯(cuò)解決辦法

    TypeError:res.forEach?is?not?a?function報(bào)錯(cuò)解決辦法

    這篇文章主要給大家介紹了關(guān)于TypeError:res.forEach?is?not?a?function報(bào)錯(cuò)的解決辦法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-07-07
  • Vite代理如何解決跨域問題詳解

    Vite代理如何解決跨域問題詳解

    跨域是指瀏覽器不能執(zhí)行其他網(wǎng)站的腳本,它是由瀏覽器的同源策略造成的,是瀏覽器對(duì)JavaScript實(shí)施的安全限制,下面這篇文章主要給大家介紹了關(guān)于Vite代理如何解決跨域問題的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • vue項(xiàng)目上線路徑跳轉(zhuǎn)無效(404問題)的解決

    vue項(xiàng)目上線路徑跳轉(zhuǎn)無效(404問題)的解決

    文章主要介紹了兩種解決Vue?Router在Nginx部署后路由無法跳轉(zhuǎn)問題的方法:法一是在Vue?Router中將路由模式改為hash模式,利用URL的hash部分來模擬完整URL,這樣不會(huì)向后端發(fā)送請(qǐng)求;法二是在Nginx中配置路由,將所有請(qǐng)求重定向到index.html,以支持history模式的Vue?Router
    2025-10-10
  • Vue2+Quill富文本編輯器詳解

    Vue2+Quill富文本編輯器詳解

    文章指出Quill 2.0.0-dev.4與2.0.2版本存在兼容性問題,原因未知,主要步驟包括引入依賴、創(chuàng)建編輯器組件、使用及效果測(cè)試
    2025-08-08
  • el-upload http-request使用 多個(gè)文件上傳攜帶其他參數(shù)方式

    el-upload http-request使用 多個(gè)文件上傳攜帶其他參數(shù)方式

    這篇文章主要介紹了el-upload http-request使用 多個(gè)文件上傳攜帶其他參數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vuejs 單文件組件實(shí)例詳解

    Vuejs 單文件組件實(shí)例詳解

    這篇文章主要介紹了Vuejs 單文件組件實(shí)例詳解,需要的朋友可以參考下
    2018-02-02
  • Vue集成Iframe頁面的方法示例

    Vue集成Iframe頁面的方法示例

    這篇文章主要介紹了Vue集成Iframe頁面的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12
  • 詳解vue項(xiàng)目中如何加載markdown

    詳解vue項(xiàng)目中如何加載markdown

    這篇文章主要為大家詳細(xì)介紹了在vue項(xiàng)目中如何加載markdown,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11
  • Vue3中內(nèi)置組件Teleport的基本使用與典型案例

    Vue3中內(nèi)置組件Teleport的基本使用與典型案例

    Teleport是一種能夠?qū)⑽覀兊哪0逡苿?dòng)到DOM中Vue app之外的其他位置的技術(shù),下面這篇文章主要給大家介紹了關(guān)于Vue3中內(nèi)置組件Teleport的基本使用與典型案例的相關(guān)資料,需要的朋友可以參考下
    2023-04-04

最新評(píng)論

鲁山县| 夏津县| 洪湖市| 光泽县| 安岳县| 申扎县| 灯塔市| 南城县| 颍上县| 许昌市| 东城区| 会泽县| 合山市| 西平县| 印江| 曲麻莱县| 临夏市| 土默特左旗| 桦川县| 天镇县| 泸水县| 青神县| 南康市| 潞城市| 蓬莱市| 元朗区| 嘉兴市| 阳原县| 奈曼旗| 池州市| 钦州市| 西充县| 江川县| 长武县| 大城县| 黄骅市| 宁夏| 沙田区| 乐平市| 百色市| 桐梓县|