更新记录
1.1.2(2026-11-10) 下载此版本
- 字形表抽出为独立模块
components/o-icon/glyphs.js(导出GLYPHS与ICON_NAMES),组件与演示页共用一份数据,新增图标不再需要手动同步演示页 pages/index/icon.vue图标总览由 1358 行硬编码清单改为读取字形表,缩减到 32 行
平台兼容性
uni-app(3.8.10)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| √ | √ | √ | √ | √ | - | √ | √ | - |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| √ | √ | √ | √ | √ | √ | - | √ | √ | √ | - | - |
o-icon 图标
基于 iconfont 的字体图标组件,内置 332 个图标。同一套代码在 Vue2 / Vue3、H5、App、各平台小程序下表现一致。
特性
- 字形表渲染:图标字符通过数据表直接输出到
text节点,不依赖::before伪元素,nvue / 各家小程序都不会出现“图标不显示”的问题 - 字形数据单一来源:
components/o-icon/glyphs.js导出GLYPHS(name -> unicode)与ICON_NAMES(图标名列表),业务代码可import用于遍历展示,新增图标只改这一份 - Vue2 / Vue3 双兼容:Options API 编写,Vue3 下通过
emits声明click事件,Vue2 自动忽略 - 全平台小程序适配:微信 / QQ / 支付宝 / 百度 / 字节 / 快手 / 京东 / 飞书,微信端开启
virtualHost去包裹层,styleIsolation: 'apply-shared'让页面上的工具类(如py-2)作用到图标 - 尺寸容错:数字、
58、58rpx、24px、1.2em、120%、10vw均可,非法值自动回退默认值 - 颜色容错:
#hex、rgb/rgba、hsl、CSS 变量、主题色名(primary/red/white等)均可,传空字符串继承父级颜色,无法识别的值按 class 交给外部样式 - 支持
spin旋转动画、click事件透传、带前缀的图标名(user与o-icon-user等价)
基础用法
<o-icon name="user"></o-icon>
<o-icon name="search" size="40" color="#23A05F"></o-icon>
<o-icon name="setting-filled" size="48rpx" color="primary"></o-icon>
<o-icon name="loading" size="24px" color="" spin></o-icon>
属性
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| name | String | '' |
图标名,见内置图标清单;支持 user / o-icon-user 两种写法,Fill 版本加 -filled 后缀 |
| color | String | #666666 |
颜色。支持 #hex、rgb()、rgba()、hsl()、var(--x)、transparent 等颜色值,以及 primary / success / warning / danger / error / info / red / green / blue / orange / yellow / brown / pink / purple / cyan / black / grey / gray / white 主题色名;传空字符串表示继承父级颜色;其他字符串会作为 o-icon--xxx 类名,便于外部自定义 |
| size | String / Number | 32rpx |
尺寸。数字或纯数字字符串按 rpx 处理;带单位(px / rpx / em / rem / % / vw 等)原样使用;也支持预设 xs(20rpx) / sm(24rpx) / md(32rpx) / lg(40rpx) / xl(48rpx) |
| spin | Boolean | false |
是否旋转(加载类图标) |
事件
| 事件 | 说明 |
|---|---|
| click | 点击图标时触发,透传原始事件对象 |
<o-icon name="close" size="lg" @click="onClose"></o-icon>
全局 class 与样式
组件根节点为 text.o-icon,父级传入的 class / style 会直接作用在图标节点上:
<o-icon name="star-filled" class="mr-2" style="opacity: .6"></o-icon>
需要覆盖颜色 / 尺寸时,行内样式优先级高于 class,可传 color="" 让图标继承父级 color:
<view style="color: #23A05F">
<o-icon name="user" color=""></o-icon>
</view>
图标清单
name 取值见 components/o-icon/o-icon.vue 中的 GLYPHS 表(与 iconfont.css 的图标名一一对应),共 332 个。
替换 / 新增图标时:
- 在 iconfont.cn 项目里添加图标并下载字体,覆盖
components/o-icon/iconfont.ttf - 同步更新组件内
GLYPHS表的'图标名': '\uXXXX'键值对(由 iconfont 的iconfont.css复制转换,键名统一小写)
平台说明
- H5 / App(vue):
@font-face直接引用同目录iconfont.ttf - 小程序:小程序的 wxss / acss 不支持本地字体文件(只认 https 或 base64),因此组件在
#ifdef MP下改为引入iconfont.mp.scss——它把iconfont.ttf以 base64 内联,微信 / QQ / 支付宝 / 百度 / 字节 / 快手 / 京东 / 飞书均可离线使用- 替换字体后需要重新生成:
node uni_modules/o-icon/components/o-icon/build-font-base64.js - 若不想把 68KB base64 放进主包,可删掉
iconfont.mp.scss的引用,改用uni.loadFontFace加载 CDN 上的字体文件
- 替换字体后需要重新生成:
- App(nvue / uvue):不支持 CSS
@font-face,需在App.vue的onLaunch中注册字体后使用,例如:
// #ifdef APP-NVUE
const domModule = uni.requireNativePlugin('dom')
domModule.addRule('fontFace', {
fontFamily: 'o-icon',
src: "url('https://your-cdn.com/iconfont.ttf')"
})
// #endif
更新日志
见 changelog.md。

收藏人数:
下载插件并导入HBuilderX
赞赏(0)
下载 2209
赞赏 11
下载 12753694
赞赏 1959
赞赏
京公网安备:11010802035340号