ant-design/components/icon/index.zh-CN.md
2018-09-02 20:59:37 +08:00

123 lines
4.1 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: General
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
| 参数 | 说明 | 类型 | 默认值 |
| --- | --- | --- | --- |
| type | 图标类型。遵循图标的命名规范 | string | - |
| style | 设置图标的样式,例如 `fontSize``color` | CSSProperties | - |
| theme | 图标主题风格。可选实心、描线、双色等主题风格,适用于官方图标 | 'filled' \| 'outlined' \| 'twoTone' | 'outlined' |
| spin | 是否有旋转动画 | boolean | false |
| component | 控制如何渲染图标,通常是一个渲染根标签为 `<svg>``React` 组件,**会使 `type` 属性失效** | ComponentType<CustomIconComponentProps\> | - |
| twoToneColor | 仅适用双色图标设置双色图标的主要颜色 | string (十六进制颜色) | - |
其中 `theme`, `component`, `twoToneColor` `antd@3.9.x` 新增加的属性最佳实践是给使用的 `<Icon />` 组件传入属性 `theme` 以明确图标的主题风格例如
```jsx
<Icon type="star" theme="filled" />
```
所有的图标都会以 `<svg>` 标签渲染可以使用 `style` `className` 设置图标的大小和单色图标的颜色例如
```jsx
<Icon type="message" style={{ fontSize: '16px', color: '#08c' }} />
```
对于双色图标可以通过使用 `Icon.getTwoToneColor()` `Icon.setTwoToneColor(colorString)` 来设置图标主色
```jsx
Icon.setTwoToneColor('#eb2f96');
Icon.getTwoToneColor(); // #eb2f96
```
如果使用 `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 'antd';
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 | - |
### 使用 iconfont.cn 的自定义图标
#### Icon.createFromIconfontCN(options)
这个方法适用于 `iconfont.cn` 的用户
```js
const MyIcon = Icon.createFromIconfontCN({
namespace: 'foo', // identifier
scriptUrl: '//at.alicdn.com/t/font_8d5l8fzk5b87iudi.js', // generated by iconfont.cn
prefix: 'icon-',
});
ReactDOM.render(<MyIcon type="example" />, mountedNode);
```
其本质上是创建了一个使用 `<use>` 标签来渲染图标的组件
`options` 的配置项如下
| 参数 | 说明 | 类型 | 默认值 |
| --- | --- | --- | --- |
| scriptUrl | [iconfont.cn](http://iconfont.cn/) 项目在线生成的 `js` 地址 `namespace` 也设置的情况下有效 | string | - |
| extraCommonProps | 给所有的 `svg` 图标 `<Icon />` 组件设置额外的属性 | `{ [key: string]: any }` | {} |
`namespace` `scriptUrl` 都设置有效的情况下组件在渲染前会自动引入 [iconfont.cn](http://iconfont.cn/) 项目中的图标符号集无需手动引入
[iconfont.cn 使用帮助](http://iconfont.cn/help/detail?spm=a313x.7781069.1998910419.15&helptype=code) 查看如何生成 `js` 地址