ant-design/components/icon/index.zh-CN.md
2020-03-08 13:59:44 +08:00

151 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
category: Components
subtitle: 图标
type: 通用
title: Icon
toc: false
---
语义化的矢量图形。
## 设计师专属
安装 [Kitchen Sketch 插件 💎](https://kitchen.alipay.com),就可以一键拖拽使用 Ant Design 和 Iconfont 的海量图标,还可以关联自有项目。
## 图标列表
```__react
import IconDisplay from 'site/theme/template/IconDisplay';
ReactDOM.render(<IconDisplay />, mountNode);
```
## API
从 4.0 开始antd 不再内置 Icon 组件,请使用独立的包 `@ant-design/icons`
### 通用图标
| 参数 | 说明 | 类型 | 默认值 | 版本 |
| --- | --- | --- | --- | --- |
| className | 设置图标的样式名 | `string` | - | |
| style | 设置图标的样式,例如 `fontSize``color` | CSSProperties | - | |
| spin | 是否有旋转动画 | boolean | false | |
| rotate | 图标旋转角度IE9 无效) | number | - | |
| twoToneColor | 仅适用双色图标。设置双色图标的主要颜色 | string (十六进制颜色) | - | |
其中我们提供了三种主题的图标,不同主题的 Icon 组件名为图标名加主题做为后缀。
```jsx
import { StarOutlined, StarFilled, StarTwoTone } from '@ant-design/icons';
<StarOutlined />
<StarFilled />
<StarTwoTone twoToneColor="#eb2f96" />
```
### 自定义 Icon/Custom Icon
| 参数 | 说明 | 类型 | 默认值 | 版本 |
| --- | --- | --- | --- | --- |
| style | 设置图标的样式,例如 `fontSize``color` | CSSProperties | - | |
| spin | 是否有旋转动画 | boolean | false | |
| rotate | 图标旋转角度IE9 无效) | number | - | |
| component | 控制如何渲染图标,通常是一个渲染根标签为 `<svg>``React` 组件 | ComponentType<CustomIconComponentProps\> | - | |
### 关于 SVG 图标
`3.9.0` 之后我们使用了 SVG 图标替换了原先的 font 图标从而带来了以下优势
- 完全离线化使用不需要从 CDN 下载字体文件图标不会因为网络问题呈现方块也无需字体文件本地部署
- 在低端设备上 SVG 有更好的清晰度
- 支持多色图标
- 对于内建图标的更换可以提供更多 API而不需要进行样式覆盖
更多讨论可参考[#10353](https://github.com/ant-design/ant-design/issues/10353)。
所有的图标都会以 `<svg>` 标签渲染可以使用 `style` `className` 设置图标的大小和单色图标的颜色例如
```jsx
import { MessageOutlined } from '@ant-design/icons';
<MessageOutlined style={{ fontSize: '16px', color: '#08c' }} />;
```
### 双色图标主色
对于双色图标可以通过使用 `getTwoToneColor()` `setTwoToneColor(colorString)` 来全局设置图标主色
```jsx
import { getTwoToneColor, setTwoToneColor } from '@ant-design/icons';
setTwoToneColor('#eb2f96');
getTwoToneColor(); // #eb2f96
```
### 自定义 font 图标
`3.9.0` 之后我们提供了一个 `createFromIconfontCN` 方法方便开发者调用在 [iconfont.cn](http://iconfont.cn/) 上自行管理的图标
```js
import { createFromIconfontCN } from '@ant-design/icons';
const MyIcon = createFromIconfontCN({
scriptUrl: '//at.alicdn.com/t/font_8d5l8fzk5b87iudi.js', // 在 iconfont.cn 上生成
});
ReactDOM.render(<MyIcon type="icon-example" />, mountedNode);
```
其本质上是创建了一个使用 `<use>` 标签来渲染图标的组件
`options` 的配置项如下
| 参数 | 说明 | 类型 | 默认值 | 版本 |
| --- | --- | --- | --- | --- |
| scriptUrl | [iconfont.cn](http://iconfont.cn/) 项目在线生成的 `js` 地址 | string | - | |
| extraCommonProps | 给所有的 `svg` 图标 `<Icon />` 组件设置额外的属性 | `{ [key: string]: any }` | {} | |
`scriptUrl` 都设置有效的情况下组件在渲染前会自动引入 [iconfont.cn](http://iconfont.cn/) 项目中的图标符号集无需手动引入
[iconfont.cn 使用帮助](http://iconfont.cn/help/detail?spm=a313x.7781069.1998910419.15&helptype=code) 查看如何生成 `js` 地址
### 自定义 SVG 图标
如果使用 `webpack`可以通过配置 [@svgr/webpack](https://www.npmjs.com/package/@svgr/webpack) 来将 `svg` 图标作为 `React` 组件导入。`@svgr/webpack` `options` 选项请参阅 [svgr 文档](https://github.com/smooth-code/svgr#options)
```js
// webpack.config.js
{
test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
use: [
{
loader: 'babel-loader',
},
{
loader: '@svgr/webpack',
options: {
babel: false,
icon: true,
},
},
],
}
```
```jsx
import Icon from '@ant-design/icons';
import MessageSvg from 'path/to/message.svg'; // path to your '*.svg' file.
ReactDOM.render(<Icon component={MessageSvg} />, mountNode);
```
`Icon` 中的 `component` 组件的接受的属性如下
| 字段 | 说明 | 类型 | 只读值 | 版本 |
| --------- | ----------------------- | ---------------- | -------------- | ---- |
| width | `svg` 元素宽度 | string \| number | '1em' | |
| height | `svg` 元素高度 | string \| number | '1em' | |
| fill | `svg` 元素填充的颜色 | string | 'currentColor' | |
| className | 计算后的 `svg` 类名 | string | - | |
| style | 计算后的 `svg` 元素样式 | CSSProperties | - | |