Vue项目中使用element-ui,并引入第三方图标库iconfont

element-ui官网

1、安装

npm install element-ui --save-dev

2、在main.js文件中引入

import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';

Vue.use(ElementUI);

3、上面两步完成后,就可以在项目任意的组件中使用element-ui的组件了,具体使用方法,详见官网

但是使用过程中,发现element-ui自带的图标特别少,不能满足项目开发的需要,这就需要引入第三方图标库了。

Iconfont-阿里巴巴矢量图标库

1、点击进入官网,注册并登录

2、登陆成功后,首页的 图标管理 => 我的项目 点击进入

3、点进来以后,是空的,点击右边紫色的添加一个项目

4、弹出的弹框,输入关于项目的信息及设置,然后点击新建,新建项目成功。下图中红框中是比较重要的两项

Font Family 是设置这个项目图标的公共类名

FontClass/Symbol 前缀  是设置这个项目的每个图标的单独类名的前缀,最好不要设置为"el-icon",避免与element-ui自带的图标类名重复

5、项目创建成功后,就可以在搜索框中输入我们需要的图标关键字,会搜索出来很多的图标,选择需要的,加入购物车

6、选择完成以后,点击右上角的购物车,然后点击添加到项目,就会出现我们自己创建的项目,选中,点击确定就添加成功

              

7、添加成功以后,项目中就有我们需要的图标了,然后下载到本地,并加压下载的压缩包

8、解压出来的文件夹下有10个文件,demo的四个文件是图标使用的例子,介绍了图标使用的三种方式,

我们在项目中使用 fontclass方法,因此需要用到下图中画红线的五个文件。

9、在项目src/assets文件夹下,创建一个名为icon的文件夹,把需要用到的五个文件拷贝进去

10、在项目的main.js中引入图标样式文件

import './assets/icon/iconfont.css';

11、iconfont.css文件中 .iconfont 类 设置我们引入的图标的整体的样式 ,.icon-xxx:before  是我们引入的每一个图标, 我们可以通过在.icon-xxx中写样式,单独设置某一个图标的样式


@font-face {font-family: "iconfont";
  src: url('iconfont.eot?t=1537677824075'); /* IE9*/
  src: url('iconfont.eot?t=1537677824075#iefix') format('embedded-opentype'), /* IE6-IE8 */
  url('data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAAUEAAsAAAAAB2wAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAARAAAAFY8hkg1Y21hcAAAAYAAAABWAAABhmV10O5nbHlmAAAB2AAAATgAAAFQ16dO6WhlYWQAAAMQAAAALgAAADYSubn+aGhlYQAAA0AAAAAcAAAAJAfeA4RobXR4AAADXAAAAAwAAAAMDAAAAGxvY2EAAANoAAAACAAAAAgAOgCobWF4cAAAA3AAAAAeAAAAIAEQAE5uYW1lAAADkAAAAUUAAAJtPlT+fXBvc3QAAATYAAAAKgAAADvLYFe3eJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2BkYWCcwMDKwMHUyXSGgYGhH0IzvmYwYuRgYGBiYGVmwAoC0lxTGByeCTxzZm7438AQw9zA0AAUZgTJAQDjbgw2eJztkLERgDAMA99OSMFRMAYFW2QJKsbPGkFxYAt099ZZdiVgAZI4RQa7MYYupRZ5Yo08x0+RG972VnuHzyXTrYS7RuHXFvN4Nx9tTUazrU7wB1IlDpIAAHicTVC9SsNQGP2++5NYmoS2NDfpL42FpNQSMDa5lEKwCA6lin0B5zg4diqIvkBH0dUn6OYDCO4dM3W3jyBG7+jhLGc4PxygoEB75AcMaMAxAMaJH1jo2P2qV+V2Pw4xxUjYdU16sZ/ILupkp5+/PM+0a5IW3+NKGVtRy1gVn2x8fycpfmTmu6mYFbf4tssy9PxeV7jtXdZa60frJhCA3ycG9BHKMAPgPgQJSAGOBtRCvS6cRMgU+1LzAy0kZyEqpYodoemRRdS6wPGFIxInRTWPQF7sOUcvz9HjvNjn2wObRAM3ng4RSadkGYRUGCPs5uLqkiJjFUIMq9QhiMNp7A6iCft6+O9XefSVHbbLjawR27UXOExouxM1R2Y453wemqPmabdN4xNcYL1hY01ultuDevIPlrRCh3icY2BkYGAA4qUXj6+O57f5ysDNwgAC189aI9H/G1kYmBuADA4GJpAoAEE1CmgAAHicY2BkYGBu+N/AEMPCAAJAkpEBFTADAEcJAmwEAAAABAAAAAQAAAAAAAAAADoAqHicY2BkYGBgZnACYhBgAmIuIGRg+A/mMwAAD1IBXwAAeJxlj01OwzAQhV/6B6QSqqhgh+QFYgEo/RGrblhUavdddN+mTpsqiSPHrdQDcB6OwAk4AtyAO/BIJ5s2lsffvHljTwDc4Acejt8t95E9XDI7cg0XuBeuU38QbpBfhJto41W4Rf1N2MczpsJtdGF5g9e4YvaEd2EPHXwI13CNT+E69S/hBvlbuIk7/Aq30PHqwj7mXle4jUcv9sdWL5xeqeVBxaHJIpM5v4KZXu+Sha3S6pxrW8QmU4OgX0lTnWlb3VPs10PnIhVZk6oJqzpJjMqt2erQBRvn8lGvF4kehCblWGP+tsYCjnEFhSUOjDFCGGSIyujoO1Vm9K+xQ8Jee1Y9zed0WxTU/3OFAQL0z1xTurLSeTpPgT1fG1J1dCtuy56UNJFezUkSskJe1rZUQuoBNmVXjhF6XNGJPyhnSP8ACVpuyAAAAHicY2BigAAuBuyAmZGJkZmRhYGjILG4uDy/KIWtMj8vPaOUgQEAQbkGNwAA') format('woff'),
  url('iconfont.ttf?t=1537677824075') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
  url('iconfont.svg?t=1537677824075#iconfont') format('svg'); /* iOS 4.1- */
}

.iconfont {
  font-family:"iconfont" !important;
  font-size:16px;
  font-style:normal;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

.icon-password:before { content: "\e610"; }

.icon-yonghu:before { content: "\e643"; }

12、挑选相应图标并获取类名,应用于页面: 

<i class="iconfont icon-xxx"></i>

13、在element-ui输入框中使用我们引入的图标

<template>
  <div class="login">
    <el-form ref="form" :model="userForm" label-width="80px">
      <el-form-item label="账号:">
        <el-input prefix-icon="iconfont icon-yonghu" v-model="userForm.account"></el-input>
      </el-form-item>
      <el-form-item label="密码:">
        <el-input prefix-icon="iconfont icon-password" v-model="userForm.passward"></el-input>
      </el-form-item>
      <el-form-item>
        <el-button type="primary">登录</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>

<script>
export default {
  name: 'login',
  data () {
    return {
      userForm: {
        account: '',
        passward: ''
      }
    };
  }
};
</script>

<style lang="scss" scoped>
  .login{
    width: 300px;
    margin: 0 auto;
  }
</style>

### Vue项目Element-UI图标在生产环境中偶尔出现乱码的原因分析与解决方案 #### 原因分析 1. **字体文件未正确打包** 在某些情况下,Webpack 的配置可能限制了字体文件的大小。如果 `url-loader` 中设置了 `limit` 参数(如 `<10000`),当字体文件超过该大小时,不会被转换为 Base64 编码,而是作为单独的文件处理[^2]。这可能导致生产环境下字体文件无法正常加载。 2. **CDN 加载问题** 如果通过 CDN 引入 Element-UI 的 CSS 和 JS 文件,则可能存在网络延迟或资源路径错误的情况,导致图标字体文件未能成功加载[^1]。 3. **字体文件编码不一致** 生产环境中的构建工具可能会对静态资源进行压缩和优化,从而改变字体文件的内容或格式。这种变化可能导致浏览器解析失败,最终表现为图标乱码。 --- #### 解决方案 ##### 方法一:调整 Webpack 配置以支持更大的字体文件 可以通过修改 Webpack 的 `url-loader` 或 `file-loader` 配置,确保所有字体文件都能正确打包: ```javascript module.exports = { module: { rules: [ { test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, loader: 'url-loader', options: { limit: undefined, // 移除大小限制 name: '[name].[hash:7].[ext]', outputPath: 'fonts/' // 输出目录 } } ] } }; ``` 上述配置移除了 `limit` 属性,强制将所有字体文件转换为 Base64 编码,避免因文件过大而未被打包的问题。 --- ##### 方法二:使用本地化的方式引入自定义图标 按照以下步骤操作可有效解决图标乱码问题: 1. 下载所需图标的字体文件将其放置到项目的 `src/assets/icon` 目录下。 2. 修改下载后的 `iconfont.css` 文件,确保其类名前缀与项目保持一致(例如 `el-icon-ali`)[^3]。 3. 将修改后的 `iconfont.css` 文件引入到 `main.js` 中: ```javascript import '@/assets/icon/iconfont.css'; ``` 这种方式能够完全控制字体文件的加载过程,减少依赖外部资源带来的不确定性。 --- ##### 方法三:通过在线方式引入第三方图标 如果希望简化流程,可以选择直接通过 CDN 引入阿里云图标库的样式文件: 1. 复制生成的在线样式链接,将其添加到 `public/index.html` 中: ```html <link rel="stylesheet" href="//at.alicdn.com/t/font_XXXXXX.css"> ``` 2. 确保在 HTML 文件中正确定义了样式的范围,例如 `[class^="ali-icon-"], [class*=" ali-icon-"]`[^4]。 3. 在组件中按需使用这些图标,语法与 Element-UI 自带图标相同: ```vue <i class="ali-icon-example"></i> ``` 这种方法适合不需要频繁更新图标的场景,但需要注意网络稳定性的影响。 --- ##### 方法四:检查生产环境下的静态资源配置 确认 Nginx 或其他服务器是否正确托管了字体文件。以下是典型的 Nginx 配置示例: ```nginx location /static/fonts/ { add_header Access-Control-Allow-Origin *; types { font/woff woff; font/woff2 woff2; application/x-font-ttf ttf; application/vnd.ms-fontobject eot; } } ``` 此配置允许跨域访问字体文件,指定 MIME 类型以便浏览器正确识别它们。 --- ### 总结 针对 Vue 项目Element-UI 图标在生产环境中可能出现的乱码问题,建议优先调整 Webpack 配置以适应较大的字体文件;其次考虑采用本地化的图标管理策略;最后还需验证服务器端的静态资源配置是否合理。 ---
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值