Icon 图标 #

概述 #

Ant Design 提供了丰富的图标库,通过 @ant-design/icons 包提供超过 2000 个高质量图标。图标可以帮助用户快速理解功能含义,提升界面的可读性和美观度。

安装 #

bash
npm install @ant-design/icons

基础用法 #

基本使用 #

tsx
import { HomeOutlined, SettingFilled, SmileOutlined } from '@ant-design/icons';

<HomeOutlined />
<SettingFilled />
<SmileOutlined />

图标尺寸 #

tsx
import { HomeOutlined } from '@ant-design/icons';

<HomeOutlined style={{ fontSize: '16px' }} />
<HomeOutlined style={{ fontSize: '24px' }} />
<HomeOutlined style={{ fontSize: '32px' }} />
<HomeOutlined style={{ fontSize: '48px' }} />

图标颜色 #

tsx
import { HomeOutlined, HeartFilled, StarFilled } from '@ant-design/icons';

<HomeOutlined style={{ color: '#1677ff' }} />
<HeartFilled style={{ color: '#ff4d4f' }} />
<StarFilled style={{ color: '#faad14' }} />

旋转动画 #

tsx
import { SyncOutlined, LoadingOutlined } from '@ant-design/icons';

<SyncOutlined spin />
<LoadingOutlined spin />

旋转角度 #

tsx
import { SyncOutlined } from '@ant-design/icons';

<SyncOutlined rotate={90} />
<SyncOutlined rotate={180} />
<SyncOutlined rotate={270} />

图标类型 #

Ant Design 图标分为三种类型:

1. 线框风格 (Outlined) #

tsx
import {
  HomeOutlined,
  SettingOutlined,
  UserOutlined,
  SearchOutlined,
} from '@ant-design/icons';

<HomeOutlined />
<SettingOutlined />
<UserOutlined />
<SearchOutlined />

特点:

  • 线条简洁
  • 适合浅色背景
  • 默认推荐使用

2. 实底风格 (Filled) #

tsx
import {
  HomeFilled,
  SettingFilled,
  UserOutlined,
  StarFilled,
} from '@ant-design/icons';

<HomeFilled />
<SettingFilled />
<UserOutlined />
<StarFilled />

特点:

  • 视觉突出
  • 适合强调状态
  • 如选中、激活状态

3. 双色风格 (TwoTone) #

tsx
import {
  HomeTwoTone,
  SettingTwoTone,
  StarTwoTone,
  HeartTwoTone,
} from '@ant-design/icons';

<HomeTwoTone />
<SettingTwoTone />
<StarTwoTone />
<HeartTwoTone />

特点:

  • 双色设计
  • 视觉层次丰富
  • 可自定义主色

双色图标自定义颜色 #

tsx
import { HeartTwoTone, StarTwoTone } from '@ant-design/icons';

<HeartTwoTone twoToneColor="#eb2f96" />
<StarTwoTone twoToneColor="#faad14" />

常用图标分类 #

方向性图标 #

tsx
import {
  UpOutlined,
  DownOutlined,
  LeftOutlined,
  RightOutlined,
  ArrowUpOutlined,
  ArrowDownOutlined,
  ArrowLeftOutlined,
  ArrowRightOutlined,
} from '@ant-design/icons';

操作类图标 #

tsx
import {
  PlusOutlined,
  MinusOutlined,
  CloseOutlined,
  CheckOutlined,
  EditOutlined,
  DeleteOutlined,
  SearchOutlined,
  SettingOutlined,
} from '@ant-design/icons';

提示类图标 #

tsx
import {
  InfoCircleOutlined,
  InfoCircleFilled,
  CheckCircleOutlined,
  CheckCircleFilled,
  WarningOutlined,
  WarningFilled,
  CloseCircleOutlined,
  CloseCircleFilled,
} from '@ant-design/icons';

数据类图标 #

tsx
import {
  BarChartOutlined,
  LineChartOutlined,
  PieChartOutlined,
  AreaChartOutlined,
  DotChartOutlined,
} from '@ant-design/icons';

文件类图标 #

tsx
import {
  FileOutlined,
  FileTextOutlined,
  FilePdfOutlined,
  FileExcelOutlined,
  FileWordOutlined,
  FileImageOutlined,
  FolderOutlined,
  FolderOpenOutlined,
} from '@ant-design/icons';

用户类图标 #

tsx
import {
  UserOutlined,
  TeamOutlined,
  UserAddOutlined,
  UserDeleteOutlined,
  UsergroupAddOutlined,
  UsergroupDeleteOutlined,
} from '@ant-design/icons';

与组件配合使用 #

按钮中使用 #

tsx
import { Button, Space } from 'antd';
import { SearchOutlined, DownloadOutlined, PlusOutlined } from '@ant-design/icons';

<Space>
  <Button type="primary" icon={<SearchOutlined />}>搜索</Button>
  <Button icon={<DownloadOutlined />}>下载</Button>
  <Button type="primary" shape="circle" icon={<PlusOutlined />} />
</Space>

输入框中使用 #

tsx
import { Input } from 'antd';
import { UserOutlined, SearchOutlined } from '@ant-design/icons';

<Input placeholder="用户名" prefix={<UserOutlined />} />
<Input placeholder="搜索" suffix={<SearchOutlined />} />

标签中使用 #

tsx
import { Tag } from 'antd';
import { CheckCircleOutlined, SyncOutlined, CloseCircleOutlined } from '@ant-design/icons';

<Tag icon={<CheckCircleOutlined />} color="success">成功</Tag>
<Tag icon={<SyncOutlined spin />} color="processing">处理中</Tag>
<Tag icon={<CloseCircleOutlined />} color="error">错误</Tag>

菜单中使用 #

tsx
import { Menu } from 'antd';
import { HomeOutlined, SettingOutlined, UserOutlined } from '@ant-design/icons';

<Menu
  items={[
    { key: 'home', icon: <HomeOutlined />, label: '首页' },
    { key: 'user', icon: <UserOutlined />, label: '用户' },
    { key: 'setting', icon: <SettingOutlined />, label: '设置' },
  ]}
/>

自定义图标 #

使用 createFromIconfontCN #

iconfont.cn 创建图标:

tsx
import { createFromIconfontCN } from '@ant-design/icons';

const IconFont = createFromIconfontCN({
  scriptUrl: '//at.alicdn.com/t/font_8d5l8fzk5b87iudi.js',
});

<IconFont type="icon-tuichu" />
<IconFont type="icon-facebook" />
<IconFont type="icon-twitter" />

使用 SVG 组件 #

tsx
import Icon from '@ant-design/icons';

const HeartSvg = () => (
  <svg viewBox="0 0 1024 1024" width="1em" height="1em" fill="currentColor">
    <path d="M923 283.6c-13.4-31.1-32.6-58.9-56.9-82.8-24.3-23.8-52.5-42.4-84-55.5-32.5-13.5-66.9-20.3-102.4-20.3-49.3 0-97.4 13.5-139.2 39-10 6.1-19.5 12.8-28.5 20.1-9-7.3-18.5-14-28.5-20.1-41.8-25.5-89.9-39-139.2-39-35.5 0-69.9 6.8-102.4 20.3-31.4 13.1-59.7 31.7-84 55.5-24.4 23.9-43.5 51.7-56.9 82.8-13.9 32.3-21 66.6-21 101.9 0 33.3 6.8 68 20.3 103.3 11.3 29.5 27.5 60.1 48.2 91 32.8 48.9 77.9 99.9 133.9 151.6 92.8 85.7 184.3 137.9 188.4 140.1l23.7 15.2c10.5 6.7 24 6.7 34.5 0l23.7-15.2c4.1-2.2 95.5-54.4 188.4-140.1 56-51.7 101.1-102.7 133.9-151.6 20.7-30.9 37-61.5 48.2-91 13.5-35.3 20.3-70 20.3-103.3 0.1-35.3-7-69.6-20.9-101.9z" />
  </svg>
);

const HeartIcon = (props: any) => <Icon component={HeartSvg} {...props} />;

<HeartIcon style={{ color: '#ff4d4f', fontSize: '24px' }} />

API #

通用图标属性 #

属性 说明 类型 默认值
className 类名 string -
rotate 旋转角度 number -
spin 旋转动画 boolean false
style 样式 CSSProperties -
twoToneColor 双色图标主色 string -

createFromIconfontCN #

属性 说明 类型 默认值
scriptUrl iconfont.cn 生成的 URL string -
extraCommonProps 额外属性 object {}

最佳实践 #

1. 统一图标风格 #

在一个项目中保持图标风格一致:

tsx
import { HomeOutlined, SettingOutlined } from '@ant-design/icons';

2. 合理使用颜色 #

tsx
import { CheckCircleOutlined, CloseCircleOutlined } from '@ant-design/icons';

<CheckCircleOutlined style={{ color: '#52c41a' }} />
<CloseCircleOutlined style={{ color: '#ff4d4f' }} />

3. 加载状态使用旋转图标 #

tsx
import { LoadingOutlined } from '@ant-design/icons';

<LoadingOutlined spin style={{ fontSize: 24 }} />

4. 可访问性 #

为纯图标按钮添加 aria-label:

tsx
import { Button } from 'antd';
import { SearchOutlined } from '@ant-design/icons';

<Button type="primary" icon={<SearchOutlined />} aria-label="搜索" />

下一步 #

接下来学习 Typography 排版 组件!

最后更新:2026-03-28