Skip to content

图标字体

概述

RuoYi-Plus-UniApp 移动端项目的 WD UI 组件库提供了完整的图标字体系统,支持三种图标使用方式:字体图标、UnoCSS 图标和图片图标。图标系统采用阿里巴巴 iconfont 字体库,提供了 300+ 精心设计的图标,覆盖系统操作、导航、状态、用户、通讯、商业、文件、工具、数据、社交和平台品牌等多个分类。

图标字体系统特点:

  • 三种图标类型 - 支持字体图标、UnoCSS 图标和图片图标三种方式
  • 300+ 内置图标 - 覆盖常见业务场景的丰富图标集
  • 11 大分类 - 系统操作、导航箭头、状态指示、用户相关等分类清晰
  • 双风格设计 - 每个图标提供线性和填充两种风格
  • 跨平台兼容 - 支持 H5、小程序、App 等多端一致显示
  • 按需加载 - UnoCSS 图标支持按需加载,减少包体积
  • 自定义支持 - 支持自定义图标字体和图标前缀

图标类型

字体图标

字体图标是 WD UI 内置的图标类型,使用 iconfont 字体实现,所有图标以 Unicode 编码存储在字体文件中。

vue
<template>
  <view class="icon-demo">
    <!-- 基本使用 -->
    <wd-icon name="home" />
    <wd-icon name="search" />
    <wd-icon name="setting" />

    <!-- 填充风格 -->
    <wd-icon name="home-fill" />
    <wd-icon name="search-fill" />
    <wd-icon name="setting-fill" />

    <!-- 自定义大小 -->
    <wd-icon name="user" size="48" />

    <!-- 自定义颜色 -->
    <wd-icon name="heart" color="#ff4d4f" />
    <wd-icon name="heart-fill" color="#ff4d4f" />
  </view>
</template>

字体图标特点:

  • 使用 wd-icons 字体族
  • 支持 CSS 控制颜色、大小
  • 所有图标都有线性和填充两种风格
  • 填充风格图标名称以 -fill 结尾

UnoCSS 图标

UnoCSS 图标通过图标名称以 i- 前缀开头来识别,支持 Iconify 生态中的海量图标。

vue
<template>
  <view class="unocss-icon-demo">
    <!-- UnoCSS 图标使用 i- 前缀 -->
    <wd-icon name="i-carbon-home" />
    <wd-icon name="i-mdi-account" />
    <wd-icon name="i-ph-heart-bold" />

    <!-- 自定义大小和颜色 -->
    <wd-icon name="i-carbon-search" size="32" color="#1890ff" />
  </view>
</template>

UnoCSS 图标特点:

  • i- 前缀开头
  • 支持 Iconify 图标库中的所有图标
  • 按需加载,只打包使用的图标
  • 图标命名格式: i-{collection}-{icon-name}

常用图标集:

图标集前缀说明
Carboni-carbon-IBM Carbon Design 图标
Material Design Iconsi-mdi-Google Material Design 图标
Phosphori-ph-Phosphor 图标
Tabler Iconsi-tabler-Tabler 图标集
Heroiconsi-heroicons-Tailwind CSS 官方图标
Lucidei-lucide-Lucide 图标
Font Awesomei-fa-Font Awesome 图标

图片图标

当图标名称包含 / 时,会被识别为图片路径,使用图片方式显示。

vue
<template>
  <view class="image-icon-demo">
    <!-- 本地图片 -->
    <wd-icon name="/static/icons/custom-icon.png" size="40" />

    <!-- 网络图片 -->
    <wd-icon name="https://example.com/icon.png" size="40" />

    <!-- 相对路径 -->
    <wd-icon name="@/static/icons/logo.svg" size="48" />
  </view>
</template>

图片图标特点:

  • 图标名称包含 / 即识别为图片
  • 支持本地图片和网络图片
  • 支持 PNG、JPG、SVG 等格式
  • 图片会保持比例填充

图标分类

系统操作类

系统操作类图标用于常见的界面操作,如导航、编辑、删除等。

vue
<template>
  <view class="icon-category">
    <!-- 首页和导航 -->
    <wd-icon name="home" />
    <wd-icon name="home-fill" />
    <wd-icon name="back" />
    <wd-icon name="back-fill" />
    <wd-icon name="menu" />
    <wd-icon name="menu-fill" />
    <wd-icon name="more" />
    <wd-icon name="more-fill" />

    <!-- 搜索和筛选 -->
    <wd-icon name="search" />
    <wd-icon name="search-fill" />
    <wd-icon name="filter" />
    <wd-icon name="filter-fill" />

    <!-- 关闭和确认 -->
    <wd-icon name="close" />
    <wd-icon name="close-fill" />
    <wd-icon name="close-outline" />
    <wd-icon name="close-outline-fill" />
    <wd-icon name="check" />
    <wd-icon name="check-fill" />
    <wd-icon name="check-outline" />
    <wd-icon name="check-outline-fill" />

    <!-- 编辑操作 -->
    <wd-icon name="add" />
    <wd-icon name="add-fill" />
    <wd-icon name="minus" />
    <wd-icon name="minus-fill" />
    <wd-icon name="edit" />
    <wd-icon name="edit-fill" />
    <wd-icon name="delete" />
    <wd-icon name="delete-fill" />
    <wd-icon name="copy" />
    <wd-icon name="copy-fill" />
    <wd-icon name="save" />
    <wd-icon name="save-fill" />

    <!-- 文件操作 -->
    <wd-icon name="upload" />
    <wd-icon name="upload-fill" />
    <wd-icon name="download" />
    <wd-icon name="download-fill" />
    <wd-icon name="print" />
    <wd-icon name="print-fill" />
    <wd-icon name="share" />
    <wd-icon name="share-fill" />
    <wd-icon name="link" />
    <wd-icon name="link-fill" />

    <!-- 系统操作 -->
    <wd-icon name="refresh" />
    <wd-icon name="refresh-fill" />
    <wd-icon name="setting" />
    <wd-icon name="setting-fill" />
    <wd-icon name="help" />
    <wd-icon name="help-fill" />
    <wd-icon name="clear" />
    <wd-icon name="clear-fill" />
    <wd-icon name="scan" />
    <wd-icon name="scan-fill" />

    <!-- 登录登出 -->
    <wd-icon name="login" />
    <wd-icon name="login-fill" />
    <wd-icon name="logout" />
    <wd-icon name="logout-fill" />
    <wd-icon name="poweroff" />
    <wd-icon name="poweroff-fill" />

    <!-- 播放控制 -->
    <wd-icon name="play" />
    <wd-icon name="play-fill" />
    <wd-icon name="pause" />
    <wd-icon name="pause-fill" />
    <wd-icon name="stop" />
    <wd-icon name="stop-fill" />
    <wd-icon name="next" />
    <wd-icon name="next-fill" />
    <wd-icon name="previous" />
    <wd-icon name="previous-fill" />
    <wd-icon name="forward" />
    <wd-icon name="forward-fill" />
    <wd-icon name="backward" />
    <wd-icon name="backward-fill" />

    <!-- 视图操作 -->
    <wd-icon name="fullscreen" />
    <wd-icon name="fullscreen-fill" />
    <wd-icon name="exit-fullscreen" />
    <wd-icon name="exit-fullscreen-fill" />
    <wd-icon name="zoom-in" />
    <wd-icon name="zoom-in-fill" />
    <wd-icon name="zoom-out" />
    <wd-icon name="zoom-out-fill" />
    <wd-icon name="rotate" />
    <wd-icon name="rotate-fill" />

    <!-- 其他 -->
    <wd-icon name="enter" />
    <wd-icon name="enter-fill" />
    <wd-icon name="jump" />
    <wd-icon name="jump-fill" />
    <wd-icon name="swap" />
    <wd-icon name="swap-fill" />
    <wd-icon name="translate" />
    <wd-icon name="translate-fill" />
    <wd-icon name="keywords" />
    <wd-icon name="keywords-fill" />
    <wd-icon name="rollback" />
    <wd-icon name="rollback-fill" />
  </view>
</template>

系统操作类图标列表:

图标名填充风格说明
homehome-fill首页
backback-fill返回
closeclose-fill关闭
close-outlineclose-outline-fill圆形关闭
checkcheck-fill勾选
check-outlinecheck-outline-fill圆形勾选
menumenu-fill菜单
moremore-fill更多
searchsearch-fill搜索
filterfilter-fill筛选
refreshrefresh-fill刷新
settingsetting-fill设置
helphelp-fill帮助
addadd-fill添加
minusminus-fill减少
editedit-fill编辑
deletedelete-fill删除
copycopy-fill复制
savesave-fill保存
uploadupload-fill上传
downloaddownload-fill下载
printprint-fill打印
shareshare-fill分享
linklink-fill链接
clearclear-fill清除
loginlogin-fill登录
logoutlogout-fill登出
scanscan-fill扫描
playplay-fill播放
pausepause-fill暂停
stopstop-fill停止
nextnext-fill下一个
previousprevious-fill上一个
forwardforward-fill快进
backwardbackward-fill快退
enterenter-fill进入
jumpjump-fill跳转
swapswap-fill交换
rotaterotate-fill旋转
fullscreenfullscreen-fill全屏
exit-fullscreenexit-fullscreen-fill退出全屏
zoom-inzoom-in-fill放大
zoom-outzoom-out-fill缩小
translatetranslate-fill翻译
keywordskeywords-fill关键词
rollbackrollback-fill回滚
poweroffpoweroff-fill关机

导航箭头类

导航箭头类图标用于指示方向和导航操作。

vue
<template>
  <view class="arrow-icons">
    <!-- 简单方向 -->
    <wd-icon name="up" />
    <wd-icon name="down" />
    <wd-icon name="left" />
    <wd-icon name="right" />

    <!-- Chevron 箭头 -->
    <wd-icon name="chevron-up" />
    <wd-icon name="chevron-up-fill" />
    <wd-icon name="chevron-down" />
    <wd-icon name="chevron-down-fill" />
    <wd-icon name="chevron-left" />
    <wd-icon name="chevron-left-fill" />
    <wd-icon name="chevron-right" />
    <wd-icon name="chevron-right-fill" />

    <!-- Caret 三角 -->
    <wd-icon name="caret-up" />
    <wd-icon name="caret-up-fill" />
    <wd-icon name="caret-down" />
    <wd-icon name="caret-down-fill" />
    <wd-icon name="caret-left" />
    <wd-icon name="caret-left-fill" />
    <wd-icon name="caret-right" />
    <wd-icon name="caret-right-fill" />

    <!-- 分页导航 -->
    <wd-icon name="backtop" />
    <wd-icon name="backtop-fill" />
    <wd-icon name="page-first" />
    <wd-icon name="page-first-fill" />
    <wd-icon name="page-last" />
    <wd-icon name="page-last-fill" />

    <!-- 展开收起 -->
    <wd-icon name="unfold-more" />
    <wd-icon name="unfold-less" />
  </view>
</template>

导航箭头类图标列表:

图标名填充风格说明
up-向上
down-向下
left-向左
right-向右
chevron-upchevron-up-fillV形向上
chevron-downchevron-down-fillV形向下
chevron-leftchevron-left-fillV形向左
chevron-rightchevron-right-fillV形向右
caret-upcaret-up-fill三角向上
caret-downcaret-down-fill三角向下
caret-leftcaret-left-fill三角向左
caret-rightcaret-right-fill三角向右
backtopbacktop-fill返回顶部
page-firstpage-first-fill第一页
page-lastpage-last-fill最后一页
unfold-more-展开更多
unfold-less-收起

状态指示类

状态指示类图标用于显示各种状态、提示和反馈。

vue
<template>
  <view class="status-icons">
    <!-- 提示状态 -->
    <wd-icon name="warn" />
    <wd-icon name="warn-fill" />
    <wd-icon name="info" />
    <wd-icon name="info-fill" />
    <wd-icon name="tips" />
    <wd-icon name="tips-fill" />

    <!-- 加载 -->
    <wd-icon name="loading" />
    <wd-icon name="loading-fill" />

    <!-- 锁定状态 -->
    <wd-icon name="locked" />
    <wd-icon name="locked-fill" />
    <wd-icon name="unlocked" />
    <wd-icon name="unlocked-fill" />

    <!-- 可见性 -->
    <wd-icon name="visible" />
    <wd-icon name="visible-fill" />
    <wd-icon name="hidden" />
    <wd-icon name="hidden-fill" />

    <!-- 时间 -->
    <wd-icon name="time" />
    <wd-icon name="time-fill" />
    <wd-icon name="clock" />
    <wd-icon name="clock-fill" />

    <!-- 收藏喜欢 -->
    <wd-icon name="star" />
    <wd-icon name="star-fill" />
    <wd-icon name="heart" />
    <wd-icon name="heart-fill" />
    <wd-icon name="favorite" />
    <wd-icon name="favorite-fill" />
    <wd-icon name="like" />
    <wd-icon name="like-fill" />
    <wd-icon name="dislike" />
    <wd-icon name="dislike-fill" />

    <!-- 标记 -->
    <wd-icon name="flag" />
    <wd-icon name="flag-fill" />
    <wd-icon name="pin" />
    <wd-icon name="pin-fill" />

    <!-- 安全通知 -->
    <wd-icon name="secured" />
    <wd-icon name="secured-fill" />
    <wd-icon name="notification" />
    <wd-icon name="notification-fill" />
  </view>
</template>

状态指示类图标列表:

图标名填充风格说明
warnwarn-fill警告
infoinfo-fill信息
tipstips-fill提示
loadingloading-fill加载中
lockedlocked-fill已锁定
unlockedunlocked-fill未锁定
visiblevisible-fill可见
hiddenhidden-fill隐藏
timetime-fill时间
clockclock-fill时钟
starstar-fill星星
heartheart-fill心形
favoritefavorite-fill收藏
likelike-fill点赞
dislikedislike-fill
flagflag-fill旗帜
pinpin-fill图钉
securedsecured-fill安全
notificationnotification-fill通知

用户相关类

用户相关类图标用于用户、团队和权限管理场景。

vue
<template>
  <view class="user-icons">
    <!-- 用户基础 -->
    <wd-icon name="user" />
    <wd-icon name="user-fill" />
    <wd-icon name="user-add" />
    <wd-icon name="user-add-fill" />
    <wd-icon name="user-circle" />
    <wd-icon name="user-circle-fill" />

    <!-- 团队组织 -->
    <wd-icon name="team" />
    <wd-icon name="team-fill" />
    <wd-icon name="user-group" />
    <wd-icon name="user-group-fill" />
    <wd-icon name="contact" />
    <wd-icon name="contact-fill" />

    <!-- 权限角色 -->
    <wd-icon name="admin" />
    <wd-icon name="admin-fill" />
    <wd-icon name="vip" />
    <wd-icon name="vip-fill" />

    <!-- 用户互动 -->
    <wd-icon name="user-talk" />
    <wd-icon name="user-talk-fill" />

    <!-- 性别 -->
    <wd-icon name="male" />
    <wd-icon name="male-fill" />
    <wd-icon name="female" />
    <wd-icon name="female-fill" />

    <!-- 等级徽章 -->
    <wd-icon name="crown" />
    <wd-icon name="crown-fill" />
    <wd-icon name="diamon" />
    <wd-icon name="diamon-fill" />
  </view>
</template>

用户相关类图标列表:

图标名填充风格说明
useruser-fill用户
user-adduser-add-fill添加用户
user-circleuser-circle-fill用户头像
teamteam-fill团队
user-groupuser-group-fill用户组
contactcontact-fill联系人
adminadmin-fill管理员
vipvip-fillVIP
user-talkuser-talk-fill用户交流
malemale-fill男性
femalefemale-fill女性
crowncrown-fill皇冠
diamondiamon-fill钻石

通讯媒体类

通讯媒体类图标用于通讯、多媒体和设备相关场景。

vue
<template>
  <view class="media-icons">
    <!-- 通讯 -->
    <wd-icon name="call" />
    <wd-icon name="call-fill" />
    <wd-icon name="phone" />
    <wd-icon name="phone-fill" />
    <wd-icon name="message" />
    <wd-icon name="message-fill" />
    <wd-icon name="mail" />
    <wd-icon name="mail-fill" />
    <wd-icon name="chat" />
    <wd-icon name="chat-fill" />

    <!-- 多媒体 -->
    <wd-icon name="video" />
    <wd-icon name="video-fill" />
    <wd-icon name="audio" />
    <wd-icon name="audio-fill" />
    <wd-icon name="camera" />
    <wd-icon name="camera-fill" />
    <wd-icon name="image" />
    <wd-icon name="image-fill" />

    <!-- 设备 -->
    <wd-icon name="mobile" />
    <wd-icon name="mobile-fill" />
    <wd-icon name="iphone" />
    <wd-icon name="iphone-fill" />
    <wd-icon name="vibrate" />
    <wd-icon name="vibrate-fill" />

    <!-- 声音网络 -->
    <wd-icon name="sound" />
    <wd-icon name="sound-fill" />
    <wd-icon name="wifi" />
    <wd-icon name="wifi-fill" />
    <wd-icon name="wifi-error" />
    <wd-icon name="wifi-error-fill" />
    <wd-icon name="bluetooth" />
    <wd-icon name="bluetooth-fill" />
    <wd-icon name="signal" />
    <wd-icon name="signal-fill" />

    <!-- 电池云服务 -->
    <wd-icon name="battery" />
    <wd-icon name="battery-fill" />
    <wd-icon name="cloud" />
    <wd-icon name="cloud-fill" />
    <wd-icon name="cloud-upload" />
    <wd-icon name="cloud-upload-fill" />
    <wd-icon name="cloud-download" />
    <wd-icon name="cloud-download-fill" />

    <!-- 网络检测 -->
    <wd-icon name="internet" />
    <wd-icon name="internet-fill" />
    <wd-icon name="detection" />
    <wd-icon name="detection-fill" />
  </view>
</template>

通讯媒体类图标列表:

图标名填充风格说明
callcall-fill拨打
phonephone-fill电话
messagemessage-fill消息
mailmail-fill邮件
chatchat-fill聊天
videovideo-fill视频
audioaudio-fill音频
cameracamera-fill相机
imageimage-fill图片
mobilemobile-fill手机
iphoneiphone-filliPhone
vibratevibrate-fill振动
soundsound-fill声音
wifiwifi-fillWiFi
wifi-errorwifi-error-fillWiFi错误
bluetoothbluetooth-fill蓝牙
signalsignal-fill信号
batterybattery-fill电池
cloudcloud-fill
cloud-uploadcloud-upload-fill云上传
cloud-downloadcloud-download-fill云下载
internetinternet-fill互联网
detectiondetection-fill检测

商业功能类

商业功能类图标用于电商、支付、订单等商业场景。

vue
<template>
  <view class="business-icons">
    <!-- 购物 -->
    <wd-icon name="cart" />
    <wd-icon name="cart-fill" />
    <wd-icon name="bag" />
    <wd-icon name="bag-fill" />
    <wd-icon name="goods" />
    <wd-icon name="goods-fill" />
    <wd-icon name="shop" />
    <wd-icon name="shop-fill" />

    <!-- 支付金融 -->
    <wd-icon name="payment" />
    <wd-icon name="payment-fill" />
    <wd-icon name="wallet" />
    <wd-icon name="wallet-fill" />
    <wd-icon name="card" />
    <wd-icon name="card-fill" />
    <wd-icon name="money" />
    <wd-icon name="money-fill" />

    <!-- 订单优惠 -->
    <wd-icon name="order" />
    <wd-icon name="order-fill" />
    <wd-icon name="coupon" />
    <wd-icon name="coupon-fill" />
    <wd-icon name="discount" />
    <wd-icon name="discount-fill" />
    <wd-icon name="gift" />
    <wd-icon name="gift-fill" />

    <!-- 物流服务 -->
    <wd-icon name="delivery" />
    <wd-icon name="delivery-fill" />
    <wd-icon name="qrcode" />
    <wd-icon name="qrcode-fill" />

    <!-- 阅读订阅 -->
    <wd-icon name="subscribe" />
    <wd-icon name="subscribe-fill" />
    <wd-icon name="read" />
    <wd-icon name="read-fill" />
    <wd-icon name="company" />
    <wd-icon name="company-fill" />
  </view>
</template>

商业功能类图标列表:

图标名填充风格说明
cartcart-fill购物车
bagbag-fill购物袋
goodsgoods-fill商品
shopshop-fill店铺
paymentpayment-fill支付
walletwallet-fill钱包
cardcard-fill银行卡
moneymoney-fill金钱
orderorder-fill订单
couponcoupon-fill优惠券
discountdiscount-fill折扣
giftgift-fill礼物
deliverydelivery-fill配送
qrcodeqrcode-fill二维码
subscribesubscribe-fill订阅
readread-fill阅读
companycompany-fill公司

文件管理类

文件管理类图标用于文件、文件夹和文档操作场景。

vue
<template>
  <view class="file-icons">
    <!-- 文件基础 -->
    <wd-icon name="file" />
    <wd-icon name="file-fill" />
    <wd-icon name="file-add" />
    <wd-icon name="file-add-fill" />
    <wd-icon name="file-copy" />
    <wd-icon name="file-copy-fill" />
    <wd-icon name="file-paste" />
    <wd-icon name="file-paste-fill" />

    <!-- 文件夹 -->
    <wd-icon name="folder" />
    <wd-icon name="folder-fill" />
    <wd-icon name="folder-open" />
    <wd-icon name="folder-open-fill" />
    <wd-icon name="folder-add" />
    <wd-icon name="folder-add-fill" />

    <!-- 文档类型 -->
    <wd-icon name="file-word" />
    <wd-icon name="file-word-fill" />
    <wd-icon name="file-excel" />
    <wd-icon name="file-excel-fill" />
    <wd-icon name="file-ppt" />
    <wd-icon name="file-ppt-fill" />
    <wd-icon name="file-pdf" />
    <wd-icon name="file-pdf-fill" />
    <wd-icon name="file-unknown" />
    <wd-icon name="file-unknown-fill" />

    <!-- 其他 -->
    <wd-icon name="attach" />
    <wd-icon name="attach-fill" />
    <wd-icon name="book" />
    <wd-icon name="book-fill" />
  </view>
</template>

文件管理类图标列表:

图标名填充风格说明
filefile-fill文件
file-addfile-add-fill新建文件
file-copyfile-copy-fill复制文件
file-pastefile-paste-fill粘贴文件
folderfolder-fill文件夹
folder-openfolder-open-fill打开文件夹
folder-addfolder-add-fill新建文件夹
file-wordfile-word-fillWord文档
file-excelfile-excel-fillExcel文档
file-pptfile-ppt-fillPPT文档
file-pdffile-pdf-fillPDF文档
file-unknownfile-unknown-fill未知文件
attachattach-fill附件
bookbook-fill书籍

工具功能类

工具功能类图标用于日历、地图、工具等通用功能场景。

vue
<template>
  <view class="tool-icons">
    <!-- 时间位置 -->
    <wd-icon name="calendar" />
    <wd-icon name="calendar-fill" />
    <wd-icon name="location" />
    <wd-icon name="location-fill" />
    <wd-icon name="map" />
    <wd-icon name="map-fill" />

    <!-- 工具设备 -->
    <wd-icon name="tools" />
    <wd-icon name="tools-fill" />
    <wd-icon name="laptop" />
    <wd-icon name="laptop-fill" />
    <wd-icon name="desktop" />
    <wd-icon name="desktop-fill" />

    <!-- 应用服务 -->
    <wd-icon name="app" />
    <wd-icon name="app-fill" />
    <wd-icon name="history" />
    <wd-icon name="history-fill" />
    <wd-icon name="service" />
    <wd-icon name="service-fill" />

    <!-- 界面交互 -->
    <wd-icon name="layers" />
    <wd-icon name="layers-fill" />
    <wd-icon name="fork" />
    <wd-icon name="fork-fill" />
    <wd-icon name="cursor" />
    <wd-icon name="cursor-fill" />
    <wd-icon name="pointing-hand" />
    <wd-icon name="pointing-hand-fill" />

    <!-- 输入 -->
    <wd-icon name="keyboard" />
    <wd-icon name="keyboard-fill" />
    <wd-icon name="keyboard-delete" />
    <wd-icon name="keyboard-delete-fill" />
    <wd-icon name="ellipsis" />
    <wd-icon name="ellipsis-fill" />
  </view>
</template>

工具功能类图标列表:

图标名填充风格说明
calendarcalendar-fill日历
locationlocation-fill位置
mapmap-fill地图
toolstools-fill工具
laptoplaptop-fill笔记本
desktopdesktop-fill桌面电脑
appapp-fill应用
historyhistory-fill历史
serviceservice-fill服务
layerslayers-fill图层
forkfork-fill分叉
cursorcursor-fill光标
pointing-handpointing-hand-fill指向手
keyboardkeyboard-fill键盘
keyboard-deletekeyboard-delete-fill删除键
ellipsisellipsis-fill省略号

数据图表类

数据图表类图标用于数据展示、图表和排序场景。

vue
<template>
  <view class="chart-icons">
    <!-- 图表 -->
    <wd-icon name="chart" />
    <wd-icon name="chart-fill" />
    <wd-icon name="chart-bar" />
    <wd-icon name="chart-bar-fill" />

    <!-- 趋势 -->
    <wd-icon name="trending-up" />
    <wd-icon name="trending-down" />

    <!-- 数据操作 -->
    <wd-icon name="data" />
    <wd-icon name="data-fill" />
    <wd-icon name="asc" />
    <wd-icon name="desc" />
    <wd-icon name="move" />
    <wd-icon name="move-fill" />

    <!-- 图形 -->
    <wd-icon name="rectangle" />
    <wd-icon name="rectangle-fill" />
    <wd-icon name="demo" />
    <wd-icon name="demo-fill" />
  </view>
</template>

数据图表类图标列表:

图标名填充风格说明
chartchart-fill图表
chart-barchart-bar-fill柱状图
trending-up-上升趋势
trending-down-下降趋势
datadata-fill数据
asc-升序
desc-降序
movemove-fill移动
rectanglerectangle-fill矩形
demodemo-fill演示

社交功能类

社交功能类图标用于评论、分享、关注等社交互动场景。

vue
<template>
  <view class="social-icons">
    <!-- 评论互动 -->
    <wd-icon name="comment" />
    <wd-icon name="comment-fill" />
    <wd-icon name="reply" />
    <wd-icon name="reply-fill" />
    <wd-icon name="mention" />
    <wd-icon name="mention-fill" />
    <wd-icon name="hashtag" />
    <wd-icon name="hashtag-fill" />

    <!-- 关注好友 -->
    <wd-icon name="follow" />
    <wd-icon name="follow-fill" />
    <wd-icon name="unfollow" />
    <wd-icon name="unfollow-fill" />
    <wd-icon name="follower" />
    <wd-icon name="follower-fill" />
    <wd-icon name="friend-add" />
    <wd-icon name="friend-add-fill" />

    <!-- 群聊表情 -->
    <wd-icon name="group-chat" />
    <wd-icon name="group-chat-fill" />
    <wd-icon name="emoji" />
    <wd-icon name="emoji-fill" />
    <wd-icon name="moments" />
    <wd-icon name="moments-fill" />
  </view>
</template>

社交功能类图标列表:

图标名填充风格说明
commentcomment-fill评论
replyreply-fill回复
mentionmention-fill@提及
hashtaghashtag-fill话题标签
followfollow-fill关注
unfollowunfollow-fill取消关注
followerfollower-fill粉丝
friend-addfriend-add-fill添加好友
group-chatgroup-chat-fill群聊
emojiemoji-fill表情
momentsmoments-fill朋友圈

平台品牌类

平台品牌类图标用于显示各大平台和品牌标识。

vue
<template>
  <view class="brand-icons">
    <!-- 社交平台 -->
    <wd-icon name="wechat" />
    <wd-icon name="wechat-fill" />
    <wd-icon name="qq" />
    <wd-icon name="qq-fill" />
    <wd-icon name="weibo" />
    <wd-icon name="weibo-fill" />
    <wd-icon name="tiktok" />
    <wd-icon name="tiktok-fill" />

    <!-- 支付平台 -->
    <wd-icon name="alipay" />
    <wd-icon name="alipay-fill" />

    <!-- 技术平台 -->
    <wd-icon name="github" />
    <wd-icon name="github-fill" />

    <!-- 操作系统 -->
    <wd-icon name="apple" />
    <wd-icon name="apple-fill" />
    <wd-icon name="android" />
    <wd-icon name="android-fill" />
    <wd-icon name="windows" />
    <wd-icon name="windows-fill" />

    <!-- 浏览器 -->
    <wd-icon name="chrome" />
    <wd-icon name="chrome-fill" />
  </view>
</template>

平台品牌类图标列表:

图标名填充风格说明
wechatwechat-fill微信
qqqq-fillQQ
weiboweibo-fill微博
tiktoktiktok-fill抖音
alipayalipay-fill支付宝
githubgithub-fillGitHub
appleapple-fill苹果
androidandroid-fill安卓
windowswindows-fillWindows
chromechrome-fillChrome

字体文件配置

@font-face 定义

WD UI 图标字体使用 @font-face 规则定义,支持多种字体格式以确保跨浏览器兼容性:

scss
// 在线字体(H5 和小程序)
@font-face {
  font-family: 'wd-icons';
  src:
    url('//at.alicdn.com/t/c/font_4969054_f8a6ngjhuv.woff2?t=1754381253362') format('woff2'),
    url('//at.alicdn.com/t/c/font_4969054_f8a6ngjhuv.woff?t=1754381253362') format('woff'),
    url('//at.alicdn.com/t/c/font_4969054_f8a6ngjhuv.ttf?t=1754381253362') format('truetype');
  font-weight: normal;
  font-style: normal;
}

// APP 端本地字体
/* #ifdef APP-PLUS */
@font-face {
  font-family: 'wd-icons';
  src: url('./wd-icons.ttf') format('truetype');
  font-weight: normal;
  font-style: normal;
}
/* #endif */

字体格式说明:

格式文件扩展名浏览器支持说明
WOFF2.woff2现代浏览器最佳压缩,推荐使用
WOFF.woffIE9+、现代浏览器良好压缩
TrueType.ttf所有浏览器通用格式,兼容性最好

字体加载优化

scss
// 使用 font-display 控制字体加载行为
@font-face {
  font-family: 'wd-icons';
  src: url('...') format('...');
  font-display: block; // 短暂阻塞,然后无限等待字体
  // font-display: swap;  // 立即显示后备字体,加载完成后替换
  // font-display: fallback; // 短暂阻塞,短时间等待,超时用后备
  // font-display: optional; // 短暂阻塞,如果字体未缓存则用后备
}

font-display 值说明:

行为适用场景
auto浏览器默认默认行为
block阻塞期长,交换期无限图标等必须使用特定字体的场景
swap阻塞期极短,交换期无限正文字体,允许 FOUT
fallback阻塞期短,交换期短平衡方案
optional阻塞期短,无交换期可选装饰字体

图标组件实现

组件结构

vue
<template>
  <view :class="iconClass" :style="iconStyle" @click="handleClick">
    <image v-if="isImageIcon" class="wd-icon__image" :src="name" />
  </view>
</template>

类型定义

typescript
/**
 * 字体图标名称类型
 */
type FontIconName =
  | 'home'
  | 'home-fill'
  | 'back'
  | 'back-fill'
  // ... 300+ 图标名称
  | 'tiktok'
  | 'tiktok-fill'

/**
 * UnoCSS 图标名称类型 (以 i- 开头)
 */
type UnoIconName = `i-${string}`

/**
 * 图标名称联合类型
 * - FontIconName: 预定义的字体图标名称
 * - UnoIconName: 以 i- 开头的 UnoCSS 图标
 * - string: 图片路径或其他自定义图标
 */
export type IconName = FontIconName | UnoIconName | ImageSrc

/**
 * 图标组件属性接口
 */
interface WdIconProps {
  /** 自定义根节点样式 */
  customStyle?: string
  /** 自定义根节点样式类 */
  customClass?: string
  /** 使用的图标名字,可以使用字体图标名、UnoCSS图标类名或链接图片 */
  name: IconName
  /** 图标的颜色 */
  color?: string
  /** 图标的字体大小 */
  size?: string | number
  /** 类名前缀,用于使用自定义图标 */
  classPrefix?: string
}

/**
 * 图标组件事件接口
 */
interface WdIconEmits {
  /** 点击图标时触发 */
  click: [event: Event]
  /** 触摸图标时触发 */
  touch: [event: Event]
}

图标类型判断

typescript
/**
 * 判断是否为图片图标
 */
const isImageIcon = computed(() => {
  return isDef(props.name) && props.name.includes('/')
})

/**
 * 判断是否为 UnoCSS 图标
 */
const isUnoCSS = computed(() => {
  // 如果以 i- 开头,认为是 UnoCSS 图标
  return props.name.startsWith('i-')
})

/**
 * 计算图标类名
 */
const iconClass = computed(() => {
  const classes = [props.classPrefix, props.customClass]

  if (isImageIcon.value) {
    // 图片图标
    classes.push('wd-icon--image')
  } else if (isUnoCSS.value) {
    // UnoCSS 图标
    classes.push('wd-icon--unocss', props.name)
  } else {
    // 字体图标
    classes.push(`${props.classPrefix}-${props.name}`)
  }

  return classes.filter(Boolean).join(' ')
})

图标样式计算

typescript
/**
 * 计算图标样式
 */
const iconStyle = computed(() => {
  const styles = []

  if (props.color) {
    styles.push(`color: ${props.color};`)
  }

  if (props.size) {
    styles.push(`font-size: ${addUnit(props.size)};`)
  }

  if (props.customStyle) {
    styles.push(props.customStyle)
  }

  return styles.join(' ')
})

图标样式实现

基础样式

scss
@include b(icon) {
  display: inline-block;
  font-style: normal;
  font-weight: normal;
  font-variant: normal;
  text-transform: none;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;

  // 字体图标样式
  &:not(.wd-icon--image):not(.wd-icon--unocss) {
    font-family: 'wd-icons' !important;
  }
}

UnoCSS 图标样式

scss
@include b(icon) {
  @include m(unocss) {
    display: inline-block;
    width: 1em;
    height: 1em;
    vertical-align: middle;
  }
}

图片图标样式

scss
@include b(icon) {
  // 图片类型图标容器样式
  @include m(image) {
    width: 1em;
    height: 1em;
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden; // 防止图片溢出
  }

  // 图片元素样式
  @include e(image) {
    width: 100%;
    height: 100%;
    object-fit: cover; // 保持图片比例,填充容器
    object-position: center; // 图片居中显示
    border-radius: inherit; // 继承父元素的圆角
    display: block; // 避免 inline 元素的底部间隙
  }
}

图标 Unicode 定义

每个字体图标通过伪元素的 content 属性设置 Unicode 编码:

scss
// 系统操作类
.wd-icon-home:before {
  content: '\e65f';
}

.wd-icon-home-fill:before {
  content: '\e631';
}

.wd-icon-search:before {
  content: '\e603';
}

.wd-icon-search-fill:before {
  content: '\e601';
}

// ... 更多图标定义

自定义图标字体

创建自定义图标

  1. 使用 iconfont.cn 创建项目

    • 访问 iconfont.cn
    • 创建新项目并添加图标
    • 生成字体文件
  2. 下载字体文件

    • 下载生成的字体文件(ttf、woff、woff2)
    • 将字体文件放入项目静态资源目录
  3. 定义 @font-face

scss
// src/static/fonts/custom-icons.scss
@font-face {
  font-family: 'custom-icons';
  src:
    url('/static/fonts/custom-icons.woff2') format('woff2'),
    url('/static/fonts/custom-icons.woff') format('woff'),
    url('/static/fonts/custom-icons.ttf') format('truetype');
  font-weight: normal;
  font-style: normal;
}

// 定义图标基础样式
.custom-icon {
  font-family: 'custom-icons' !important;
  font-style: normal;
  font-weight: normal;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

// 定义各个图标
.custom-icon-logo:before {
  content: '\e001';
}

.custom-icon-brand:before {
  content: '\e002';
}

// ... 更多自定义图标

使用自定义图标

vue
<template>
  <view class="custom-icon-demo">
    <!-- 使用 classPrefix 指定自定义前缀 -->
    <wd-icon name="logo" class-prefix="custom-icon" size="48" />
    <wd-icon name="brand" class-prefix="custom-icon" size="48" color="#1890ff" />
  </view>
</template>

<style lang="scss">
// 引入自定义图标字体
@import '@/static/fonts/custom-icons.scss';
</style>

混合使用多种图标

vue
<template>
  <view class="mixed-icons">
    <!-- WD UI 内置图标 -->
    <wd-icon name="home" size="32" />

    <!-- 自定义字体图标 -->
    <wd-icon name="logo" class-prefix="custom-icon" size="32" />

    <!-- UnoCSS 图标 -->
    <wd-icon name="i-carbon-settings" size="32" />

    <!-- 图片图标 -->
    <wd-icon name="/static/icons/special.png" size="32" />
  </view>
</template>

最佳实践

1. 选择合适的图标类型

vue
<template>
  <view class="icon-selection">
    <!-- ✅ 常用图标使用内置字体图标 -->
    <wd-icon name="home" />
    <wd-icon name="search" />
    <wd-icon name="user" />

    <!-- ✅ 特殊图标使用 UnoCSS 按需加载 -->
    <wd-icon name="i-carbon-carbon" />

    <!-- ✅ 品牌 Logo 使用图片 -->
    <wd-icon name="/static/logo/company.png" />

    <!-- ❌ 避免对简单图标使用图片 -->
    <!-- <wd-icon name="/static/icons/arrow.png" /> -->
  </view>
</template>

2. 统一图标风格

vue
<template>
  <view class="icon-style">
    <!-- ✅ 同一模块使用统一风格 -->
    <view class="toolbar">
      <wd-icon name="home" />
      <wd-icon name="search" />
      <wd-icon name="user" />
      <wd-icon name="setting" />
    </view>

    <!-- ✅ 强调状态使用填充风格 -->
    <view class="active-tab">
      <wd-icon name="home-fill" color="#1890ff" />
    </view>

    <!-- ❌ 避免混用风格 -->
    <!-- <view class="mixed">
      <wd-icon name="home" />
      <wd-icon name="search-fill" />
      <wd-icon name="user" />
    </view> -->
  </view>
</template>

3. 合理设置图标大小

vue
<template>
  <view class="icon-sizing">
    <!-- ✅ 根据场景设置合理大小 -->
    <!-- 列表图标 -->
    <wd-icon name="file" size="32" />

    <!-- 按钮图标 -->
    <wd-icon name="add" size="24" />

    <!-- 大图标展示 -->
    <wd-icon name="check-outline-fill" size="64" color="#52c41a" />

    <!-- ✅ 使用相对单位保持一致 -->
    <wd-icon name="user" size="1.2em" />

    <!-- ❌ 避免图标过小或过大 -->
    <!-- <wd-icon name="info" size="12" /> -->
    <!-- <wd-icon name="home" size="200" /> -->
  </view>
</template>

4. 图标颜色与语义一致

vue
<template>
  <view class="icon-colors">
    <!-- ✅ 成功状态使用绿色 -->
    <wd-icon name="check-outline-fill" color="#52c41a" />

    <!-- ✅ 警告状态使用橙色 -->
    <wd-icon name="warn-fill" color="#faad14" />

    <!-- ✅ 错误状态使用红色 -->
    <wd-icon name="close-outline-fill" color="#ff4d4f" />

    <!-- ✅ 信息提示使用蓝色 -->
    <wd-icon name="info-fill" color="#1890ff" />

    <!-- ✅ 使用 CSS 变量保持主题一致 -->
    <wd-icon name="heart-fill" color="var(--wot-color-danger)" />
  </view>
</template>

5. 图标可访问性

vue
<template>
  <view class="icon-accessibility">
    <!-- ✅ 添加语义化说明 -->
    <view class="action-button" aria-label="删除">
      <wd-icon name="delete" />
    </view>

    <!-- ✅ 图标与文字配合使用 -->
    <view class="button-with-text">
      <wd-icon name="add" />
      <text>新建</text>
    </view>

    <!-- ✅ 重要操作添加确认提示 -->
    <view class="danger-action" @click="confirmDelete">
      <wd-icon name="delete-fill" color="#ff4d4f" />
      <text>删除</text>
    </view>
  </view>
</template>

常见问题

1. 图标不显示

问题原因:

  • 字体文件未加载
  • 图标名称拼写错误
  • 网络问题导致字体加载失败

解决方案:

vue
<template>
  <view class="icon-debug">
    <!-- 检查图标名称是否正确 -->
    <wd-icon name="home" />  <!-- ✅ 正确 -->
    <wd-icon name="Home" />  <!-- ❌ 区分大小写 -->

    <!-- 检查是否正确使用 classPrefix -->
    <wd-icon name="custom" class-prefix="my-icon" />
  </view>
</template>

<script lang="ts" setup>
// 检查字体加载状态
onMounted(() => {
  // 等待字体加载完成
  document.fonts.ready.then(() => {
    console.log('字体加载完成')
  })
})
</script>

<style lang="scss">
// 确保字体定义正确引入
@font-face {
  font-family: 'wd-icons';
  src: url('...') format('...');
  font-display: block;
}
</style>

2. 图标显示为方块或乱码

问题原因:

  • 字体文件损坏或不完整
  • Unicode 编码不匹配
  • 浏览器不支持该字体格式

解决方案:

scss
// 提供多种字体格式作为后备
@font-face {
  font-family: 'wd-icons';
  src:
    url('...woff2') format('woff2'),  // 现代浏览器首选
    url('...woff') format('woff'),    // 广泛支持
    url('...ttf') format('truetype'); // 最后的后备
  font-weight: normal;
  font-style: normal;
}

// 检查伪元素内容是否正确
.wd-icon-home:before {
  content: '\e65f'; // 确保 Unicode 编码正确
}

3. UnoCSS 图标不生效

问题原因:

  • 未安装对应的图标集
  • UnoCSS 配置不正确
  • 图标名称格式错误

解决方案:

typescript
// uno.config.ts
import { defineConfig, presetIcons } from 'unocss'

export default defineConfig({
  presets: [
    presetIcons({
      // 启用图标预设
      scale: 1.2,
      warn: true,
      collections: {
        // 配置需要使用的图标集
        carbon: () => import('@iconify-json/carbon/icons.json').then(i => i.default),
        mdi: () => import('@iconify-json/mdi/icons.json').then(i => i.default),
      },
    }),
  ],
})
bash
# 安装需要的图标集
pnpm add -D @iconify-json/carbon @iconify-json/mdi

4. 图片图标加载失败

问题原因:

  • 图片路径错误
  • 图片文件不存在
  • 跨域问题

解决方案:

vue
<template>
  <view class="image-icon-fix">
    <!-- ✅ 使用正确的路径格式 -->
    <!-- 静态资源使用绝对路径 -->
    <wd-icon name="/static/icons/logo.png" />

    <!-- 使用 @ 别名 -->
    <wd-icon :name="logoPath" />

    <!-- 网络图片确保 CORS 配置正确 -->
    <wd-icon name="https://cdn.example.com/icon.png" />
  </view>
</template>

<script lang="ts" setup>
// 动态引入图片
const logoPath = new URL('@/static/icons/logo.png', import.meta.url).href
</script>

5. 图标在 App 端显示异常

问题原因:

  • App 端不支持网络字体
  • 字体文件未打包到 App

解决方案:

scss
// 使用条件编译为 App 端提供本地字体
/* #ifdef APP-PLUS */
@font-face {
  font-family: 'wd-icons';
  src: url('./wd-icons.ttf') format('truetype');
  font-weight: normal;
  font-style: normal;
}
/* #endif */

/* #ifndef APP-PLUS */
@font-face {
  font-family: 'wd-icons';
  src:
    url('//at.alicdn.com/t/...woff2') format('woff2'),
    url('//at.alicdn.com/t/...woff') format('woff'),
    url('//at.alicdn.com/t/...ttf') format('truetype');
  font-weight: normal;
  font-style: normal;
}
/* #endif */

6. 图标点击区域过小

问题原因:

  • 图标尺寸过小
  • 没有添加足够的点击区域

解决方案:

vue
<template>
  <view class="clickable-icon">
    <!-- ✅ 包装容器扩大点击区域 -->
    <view class="icon-wrapper" @click="handleClick">
      <wd-icon name="close" size="24" />
    </view>
  </view>
</template>

API 参考

Props

参数说明类型默认值
name图标名称,支持字体图标名、UnoCSS 图标类名或图片路径IconName-
size图标大小,默认单位为 rpxstring | number40
color图标颜色string-
classPrefix类名前缀,用于使用自定义图标stringwd-icon
customClass自定义根节点样式类string-
customStyle自定义根节点样式string-

Events

事件名说明回调参数
click点击图标时触发event: Event
touch触摸图标时触发event: Event

类型定义

typescript
// 字体图标名称类型
type FontIconName =
  | 'home' | 'home-fill'
  | 'back' | 'back-fill'
  | 'close' | 'close-fill'
  // ... 300+ 图标
  | 'chrome' | 'chrome-fill'
  | 'tiktok' | 'tiktok-fill'

// UnoCSS 图标名称类型
type UnoIconName = `i-${string}`

// 图片路径类型
type ImageSrc = string

// 图标名称联合类型
type IconName = FontIconName | UnoIconName | ImageSrc

// 图标组件属性
interface WdIconProps {
  customStyle?: string
  customClass?: string
  name: IconName
  color?: string
  size?: string | number
  classPrefix?: string
}

// 图标组件事件
interface WdIconEmits {
  click: [event: Event]
  touch: [event: Event]
}

本文档详细介绍了 WD UI 图标字体系统的使用方法、图标分类、自定义配置和最佳实践。通过合理使用图标系统,可以提升应用的视觉效果和用户体验,同时保持良好的跨平台兼容性。