Skip to content

图标

说明

项目图标使用 Iconify,提供 150+ 套图标集,有 200,000+ 个图标可以免费使用。

使用图标

你可以在 Iconify 上搜索需要的图标,然后按照以下方式在项目中使用:

tsx
import { Icon } from '@/components/icon'

export default function IconExample () {
  return (
    <>
      {/* icon 参数传入搜索到的图标名 */}
      <Icon icon="icon-park-outline:user" />

      {/* 设置图标大小 */}
      <Icon icon="icon-park-outline:user" width="24" height="24" />
    
      {/* 使用 CSS 单位  */}
      <Icon icon="icon-park-outline:user" width="1.5rem" />
    
      {/* 只设置一个尺寸,保持宽高比  */}
      <Icon icon="icon-park-outline:user" height="2em" />
    
      {/* 设置图标颜色  */}
      <Icon icon="icon-park-outline:user" color="red" />
      
      {/* 旋转和翻转  */}
      <Icon icon="mdi:arrow-right" rotate={90} />
      <Icon icon="mdi:arrow-right" flip="horizontal" />
      
      {/* 使用 CSS 类  */}
      <Icon icon="icon-park-outline:user" className="my-icon" />
    </>
  )
}

创建动画图标

tsx
import { Icon } from '@/components/icon'
import styles from './AnimatedIcon.module.css'

export default function AnimatedIcon () {
  return (
    <Icon icon="icon-park-outline:loading" className={styles.spinIcon} />
  )
}
css
/* AnimatedIcon.module.css */
.spinIcon {
  animation: spin 1s linear infinite;
}

@keyframes spin {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}

图标加载方式

图标默认通过网络请求进行加载,如果你想要增强用户体验,让图标在页面加载完就立即显示,或在内网环境中使用,可以将部分图标进行预加载,以 icon-park-outline 这套图标为例:

bash
pnpm add @iconify-json/icon-park-outline

src/plugins/iconify.ts 中进行添加:

ts
import iconParkOutline from '@iconify-json/icon-park-outline/icons.json'
import { addCollection } from '@iconify/react'

export function setupIconifyOffline() {
  // 预加载图标
  addCollection(iconParkOutline)
}

本项目已默认将 icon-park-outline 预加载。

加载方式对比

加载方式优点缺点推荐场景
网络加载按需加载,不增加项目体积首次加载需请求 API图标种类多且分散
预加载立即显示,无需额外请求增加项目体积关键 UI 图标、离线应用

本地 svg 图标

将 svg 文件直接存放在 src/assets/svg-icon 中,即可直接使用图标。

text
src/assets/svg-icon
└── logo.svg

使用方式:

tsx
import { Icon } from '@/components/icon'

export default function LocalIcon () {
  
  return (
    {/* icon 名称为 icon-local:文件名  */}
    <Icon icon="icon-local:logo" />
  )
}