今日简单分享 element-ui 源码中的 icon 组件,主要从以下两个方面来分享:
一、源码中 icon 设计思想是什么呢?主要从页面结构、数据、 icon 样式三个方面来分享。
1.1 源码中 icon 组件的页面结构,可以在 package 目录下找到 icon 组件,如下图所示:
1.2 在这个 api 文档中可以找到 icon 的所有名字,具体目录如下:docs/zh-CN/icon.md
1.3 icon 的数据通过全局搜索 $icon 找到一个定义名字的 json 文件。
1.4 icon 的样式可以在这个目录中找到:/package/theme-chalk/src/icon.scss
1.5 icon 组件的使用
二、针对于源码的学习,应用到实际项目当中应该怎么去写呢?以下是我基于对源码的理解,输出一个简单 demo。
2.1 下面是 icon 组件的核心代码,重难点是怎么引入阿里矢量图字体库(下一篇文章分享哈),为了快速验证整体流程是否存在问题,本文当中懒省事,直接把 element-ui 源码中的字体库拷贝了过来,哈哈。组件结构如下 index.vue:
<template>
<i :class="`yss-icon-${name}`"></i>
</template>
<script>
export default {
name: 'yssIcon',
props: {
name: String
}
};
</script>
<style>
@font-face {
font-family: 'element-icons';
src: url('./fonts/element-icons.woff') format('woff'),
url('./fonts/element-icons.ttf') format('truetype');
font-weight: normal;
font-display: auto;
font-style: normal;
}
* {
font-family: 'element-icons' !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-webkit-text-stroke-width: 0.2px;
-moz-osx-font-smoothing: grayscale;
}
.yss-icon-edit:before {
content: '\e764';
}
.yss-icon-delete:before {
content: '\e6d7';
}
.yss-icon-share:before {
content: '\e793';
}
</style>
2.3 组件使用如下 demo.vue:
<template>
<div>
<yss-icon name="edit" />
<yss-icon name="delete" />
<yss-icon name="share" />
</div>
</template>
<script>
import { YssIcon } from '@/yssComponentsUI/yssUI.js';
export default {
name: 'demo',
components: {
YssIcon
}
};
</script>
2.4 页面效果如下:
总结:源码当中的 icon 组件使用的是字体,因此它拥有了字体一些属性,比如设置字体颜色,设置字体大小,设置字体是否加粗等等。字体的这些特性,使得 icon 组件有了更强的适应能力,兼容性、跨平台、及性能优化等优点,这是传统图片作为图标所不具备的。