svg精灵图

一、svg精灵图

利用svg的symbol元素,将每个icon包括在symbol中,通过use元素使用该symbol。

1.使用svg精灵图

简单理解使用步骤可以分为三步
1.声明精灵图(类似于一个容器,他在页面中占位,所以用display:none隐藏)。
2.svg标签改成symbol,就变为了精灵图的一个元件,在元件上声明id属性。
3.根据id调用精灵图中的svg。

    <!-- 1.声明精灵图 -->
    <svg style="display:none;">
        <!-- 2.svg标签改成symbol 就变为了精灵图的一个元件 在元件上声明id属性 -->
        <symbol id="one" width="130" height="130" xmlns="http://www.w3.org/2000/svg">
            <path d="M63.444 64.996c20.633 0 37.359-14.308 37.359-31.953 0-17.649-16.726-31.952-37.359-31.952-20.631 0-37.36 14.303-37.358 31.952 0 17.645 16.727 31.953 37.359 31.953zM80.57 75.65H49.434c-26.652 0-48.26 18.477-48.26 41.27v2.664c0 9.316 21.608 9.325 48.26 9.325H80.57c26.649 0 48.256-.344 48.256-9.325v-2.663c0-22.794-21.605-41.271-48.256-41.271z" stroke="#979797"/>
        </symbol>
        <symbol id="two" width="128" height="128" xmlns="http://www.w3.org/2000/svg">
            <path d="M108.8 44.322H89.6v-5.36c0-9.04-3.308-24.163-25.6-24.163-23.145 0-25.6 16.881-25.6 24.162v5.361H19.2v-5.36C19.2 15.281 36.798 0 64 0c27.202 0 44.8 15.281 44.8 38.961v5.361zm-32 39.356c0-5.44-5.763-9.832-12.8-9.832-7.037 0-12.8 4.392-12.8 9.832 0 3.682 2.567 6.808 6.407 8.477v11.205c0 2.718 2.875 4.962 6.4 4.962 3.524 0 6.4-2.244 6.4-4.962V92.155c3.833-1.669 6.393-4.795 6.393-8.477zM128 64v49.201c0 8.158-8.645 14.799-19.2 14.799H19.2C8.651 128 0 121.359 0 113.201V64c0-8.153 8.645-14.799 19.2-14.799h89.6c10.555 0 19.2 6.646 19.2 14.799z"/>
        </symbol>
    </svg>
    <!-- 3.根据id调用精灵图中的svg -->
    <svg>
        <use xlink:href="#one" ></use>
    </svg>
    <svg>
        <use xlink:href="#two" ></use>
    </svg>

在这里插入图片描述

3.优化

以上的操作方式是我们自己手动生成的精灵图,使用use调用精灵图。我们使用起来就不太方便,这时候我们就可以使用webpack的工具。svg-sprites-loader自动生成(默认会将文件名称作为id名称)。

// 将svg中的文件生成精灵图
const req = require.context('./svg', false, /\.svg$/)
const requireAll = requireContext => requireContext.keys().map(requireContext)
requireAll(req)

就可以这样使用了

    <svg>
      <use xlink:href="#icon-404" />
    </svg>

在这里插入图片描述

组件化使用
写成组件,属性绑定加上计算属性就可以任意使用

<template>
  <svg :class="svgClass">
    <use :xlink:href="iconName"></use>
  </svg>
</template>

<script>
  export default {
    name: 'icon',
computed: {
    iconName() {
      return `#icon-${this.iconClass}`
    }
  }
 }
</script>

导入并注册全局组件

import Vue from 'vue'
// 导入svgIcon组件对象
import SvgIcon from '@/components/SvgIcon'// svg component

// 注册全局组件
Vue.component('svg-icon', SvgIcon)

// 将svg中的文件生成精灵图
const req = require.context('./svg', false, /\.svg$/)
const requireAll = requireContext => requireContext.keys().map(requireContext)
requireAll(req)

使用

 <svg-icon icon-class="404" />
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值