2015-05-27 15:43:29 +08:00
|
|
|
|
# Iconfont
|
|
|
|
|
|
2015-07-29 16:29:18 +08:00
|
|
|
|
- category: Components
|
2015-05-27 15:43:29 +08:00
|
|
|
|
- chinese: 字体图标
|
2015-08-22 20:16:24 +08:00
|
|
|
|
- type: 基本
|
2015-05-27 15:43:29 +08:00
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
2015-06-17 19:48:17 +08:00
|
|
|
|
有含义的矢量图形,每一个图标打倒一个敌人。
|
|
|
|
|
|
2015-06-17 18:20:39 +08:00
|
|
|
|
## 图标的命名规范
|
|
|
|
|
|
2015-09-24 11:20:26 +08:00
|
|
|
|
我们为每个图标赋予了语义化的命名。只需在 <Icon> 标签内,制定对应的 type 属性即可。
|
2015-06-17 18:20:39 +08:00
|
|
|
|
|
2015-09-24 11:20:26 +08:00
|
|
|
|
不同 type 命名规则如下:
|
2015-06-17 18:20:39 +08:00
|
|
|
|
|
2015-07-10 17:17:58 +08:00
|
|
|
|
- 实心和描线图标保持同名,用 `-o` 来区分,比如 `question-circle`(实心) 和 `question-circle-o`(描线);
|
2015-06-17 18:20:39 +08:00
|
|
|
|
|
2015-07-10 17:17:58 +08:00
|
|
|
|
- 命名顺序:`[icon名]-[描线与否]-[方向]`。
|
2015-06-17 18:20:39 +08:00
|
|
|
|
|
2015-09-24 11:20:26 +08:00
|
|
|
|
## 实现原理
|
|
|
|
|
|
|
|
|
|
所有的 Icon 标签最终会渲染为
|
|
|
|
|
|
2015-09-25 10:57:27 +08:00
|
|
|
|
```html
|
2015-09-24 11:20:26 +08:00
|
|
|
|
<i class="anticon anticon-${type}"></i>
|
|
|
|
|
```
|
2015-06-17 18:20:39 +08:00
|
|
|
|
|
2015-06-07 14:01:59 +08:00
|
|
|
|
## 如何使用
|
|
|
|
|
|
2015-09-24 11:20:26 +08:00
|
|
|
|
使用 <Icon> 标签申明组件,设置对应的 type 设置需要渲染的图标,示例代码如下:
|
2015-06-07 14:01:59 +08:00
|
|
|
|
|
|
|
|
|
```html
|
2015-10-28 18:13:15 +08:00
|
|
|
|
<Icon type="link" />
|
2015-06-07 14:01:59 +08:00
|
|
|
|
```
|
|
|
|
|
|
2015-06-09 12:16:39 +08:00
|
|
|
|
> 点击图标复制代码。
|
|
|
|
|
|
2015-05-27 15:43:29 +08:00
|
|
|
|
## 图标列表
|
|
|
|
|
|
2015-06-08 22:42:36 +08:00
|
|
|
|
### 一. 方向性图标
|
2015-06-10 18:13:49 +08:00
|
|
|
|
|
2015-11-04 16:55:02 +08:00
|
|
|
|
<div id="iconset-direction"></div>
|
2015-06-05 20:26:41 +08:00
|
|
|
|
|
2015-06-08 22:42:36 +08:00
|
|
|
|
### 二. 提示建议性图标
|
2015-06-05 20:26:41 +08:00
|
|
|
|
|
2015-11-04 16:55:02 +08:00
|
|
|
|
<div id="iconset-hint"></div>
|
2015-06-05 20:26:41 +08:00
|
|
|
|
|
2015-06-08 22:42:36 +08:00
|
|
|
|
### 三. 网站通用图标
|
2015-06-05 20:26:41 +08:00
|
|
|
|
|
2015-11-04 16:55:02 +08:00
|
|
|
|
<div id="iconset-common"></div>
|
|
|
|
|
|
2015-06-05 20:26:41 +08:00
|
|
|
|
<style>
|
2015-06-07 17:18:14 +08:00
|
|
|
|
ul.anticons-list {
|
|
|
|
|
margin: 20px 0;
|
|
|
|
|
list-style: none;
|
2015-06-10 18:13:49 +08:00
|
|
|
|
width: 120%;
|
2015-09-14 15:19:44 +08:00
|
|
|
|
overflow: hidden;
|
2015-06-07 17:18:14 +08:00
|
|
|
|
}
|
2015-06-08 12:39:35 +08:00
|
|
|
|
ul.anticons-list li {
|
2015-06-07 17:18:14 +08:00
|
|
|
|
float: left;
|
2015-06-10 20:40:10 +08:00
|
|
|
|
margin: 5px 5px 5px 0;
|
|
|
|
|
width: 155px;
|
2015-06-07 17:18:14 +08:00
|
|
|
|
text-align: center;
|
|
|
|
|
list-style: none;
|
|
|
|
|
cursor: pointer;
|
2015-06-09 12:11:43 +08:00
|
|
|
|
height: 110px;
|
2015-06-08 12:39:35 +08:00
|
|
|
|
color: #5C6B77;
|
2015-06-08 12:41:37 +08:00
|
|
|
|
transition: all 0.2s ease;
|
2015-06-08 23:41:11 +08:00
|
|
|
|
position: relative;
|
2015-06-15 20:29:51 +08:00
|
|
|
|
padding: 0;
|
2015-06-08 23:41:11 +08:00
|
|
|
|
}
|
2015-11-04 16:55:02 +08:00
|
|
|
|
ul.anticons-list li:hover {
|
2015-06-08 22:42:36 +08:00
|
|
|
|
background-color: #4BB8FF;
|
2015-06-08 12:39:35 +08:00
|
|
|
|
color: #fff;
|
2015-06-07 17:18:14 +08:00
|
|
|
|
border-radius: 4px;
|
|
|
|
|
}
|
2015-11-04 16:55:02 +08:00
|
|
|
|
ul.anticons-list li.copied:hover {
|
2015-06-09 12:11:43 +08:00
|
|
|
|
color: rgba(255,255,255,0.2);
|
|
|
|
|
}
|
|
|
|
|
ul.anticons-list li:after {
|
|
|
|
|
position: absolute;
|
|
|
|
|
top: 10px;
|
|
|
|
|
left: 0;
|
|
|
|
|
height: 100%;
|
|
|
|
|
width: 100%;
|
|
|
|
|
content: "Copied!";
|
|
|
|
|
text-align: center;
|
|
|
|
|
line-height: 110px;
|
|
|
|
|
color: #fff;
|
|
|
|
|
transition: all 0.3s cubic-bezier(0.18, 0.89, 0.32, 1.28);
|
|
|
|
|
opacity: 0;
|
|
|
|
|
}
|
|
|
|
|
ul.anticons-list li.copied:after {
|
|
|
|
|
opacity: 1;
|
|
|
|
|
top: 0;
|
2015-06-08 23:41:11 +08:00
|
|
|
|
}
|
2015-06-07 17:18:14 +08:00
|
|
|
|
.anticon {
|
2015-06-09 12:11:43 +08:00
|
|
|
|
font-size: 26px;
|
2015-06-15 20:29:51 +08:00
|
|
|
|
margin: 12px 0 16px;
|
2015-06-07 17:18:14 +08:00
|
|
|
|
}
|
|
|
|
|
.anticon-class {
|
|
|
|
|
display: block;
|
|
|
|
|
text-align: center;
|
|
|
|
|
word-wrap: break-word;
|
2015-06-09 12:11:43 +08:00
|
|
|
|
transform: scale(0.83);
|
2015-06-07 17:18:14 +08:00
|
|
|
|
font-family: Consolas;
|
|
|
|
|
}
|
2015-06-05 20:26:41 +08:00
|
|
|
|
</style>
|
2015-06-08 23:41:11 +08:00
|
|
|
|
|
2015-11-04 16:55:02 +08:00
|
|
|
|
`````jsx
|
|
|
|
|
const Icon = antd.Icon;
|
|
|
|
|
|
|
|
|
|
const CopyableIcon = React.createClass({
|
|
|
|
|
getInitialState() {
|
|
|
|
|
return {
|
|
|
|
|
justCopied: false
|
|
|
|
|
};
|
|
|
|
|
},
|
|
|
|
|
onCopied(e) {
|
|
|
|
|
this.setState({ justCopied: true }, () => {
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
this.setState({ justCopied: false });
|
|
|
|
|
}, 1000);
|
2015-06-09 12:11:43 +08:00
|
|
|
|
});
|
2015-11-04 16:55:02 +08:00
|
|
|
|
},
|
|
|
|
|
getCopyCode(type) {
|
|
|
|
|
return '<Icon type="' + type + '" />';
|
|
|
|
|
},
|
|
|
|
|
render() {
|
|
|
|
|
return (
|
|
|
|
|
<Clip component="li" data-clipboard-text={this.getCopyCode(this.props.type)}
|
|
|
|
|
onSuccess={this.onCopied} className={this.state.justCopied ? 'copied' : ''}>
|
|
|
|
|
<Icon type={this.props.type} />
|
|
|
|
|
<span className="anticon-class">{this.props.type}</span>
|
|
|
|
|
</Clip>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const IconSet = React.createClass({
|
|
|
|
|
getDefaultProps() {
|
|
|
|
|
return {
|
|
|
|
|
icons: []
|
|
|
|
|
};
|
|
|
|
|
},
|
|
|
|
|
render() {
|
|
|
|
|
return (
|
|
|
|
|
<ul className="anticons-list clearfix">
|
|
|
|
|
{this.props.icons.map(type => <CopyableIcon type={type} />)}
|
|
|
|
|
</ul>
|
|
|
|
|
);
|
|
|
|
|
}
|
2015-06-08 23:41:11 +08:00
|
|
|
|
});
|
2015-11-04 16:55:02 +08:00
|
|
|
|
|
|
|
|
|
const icons1 = ['step-backward', 'step-forward', 'fast-backward', 'fast-forward', 'shrink', 'arrow-salt', 'down', 'up', 'left', 'right', 'caret-down', 'caret-up', 'caret-left', 'caret-right', 'caret-circle-right', 'caret-circle-left', 'caret-circle-o-right', 'caret-circle-o-left', 'circle-right', 'circle-left', 'circle-o-right', 'circle-o-left', 'double-right', 'double-left', 'verticle-right', 'verticle-left', 'forward', 'backward', 'rollback', 'retweet'];
|
|
|
|
|
const icons2 = ['question', 'question-circle-o', 'question-circle', 'plus', 'plus-circle-o', 'plus-circle', 'pause', 'pause-circle-o', 'pause-circle', 'minus', 'minus-circle-o', 'minus-circle', 'info', 'info-circle-o', 'info-circle', 'exclamation', 'exclamation-circle-o', 'exclamation-circle', 'cross', 'cross-circle-o', 'cross-circle', 'check', 'check-circle-o', 'check-circle', 'clock-circle-o', 'clock-circle'];
|
|
|
|
|
const icons3 = ['lock', 'unlock', 'android', 'apple', 'area-chart', 'bar-chart', 'bars', 'book', 'calendar', 'cloud', 'cloud-download', 'code', 'copy', 'credit-card', 'delete', 'desktop', 'download-line', 'edit', 'ellipsis', 'environment', 'file', 'file-text', 'folder', 'folder-open', 'github', 'hdd', 'frown', 'meh', 'inbox', 'laptop', 'appstore', 'line-chart', 'link', 'logout', 'mail', 'menu-fold', 'menu-unfold', 'mobile', 'notification', 'paper-clip', 'picture', 'pie-chart', 'poweroff', 'reload', 'search', 'setting', 'share-alt', 'shopping-cart', 'smile', 'tablet', 'tag', 'tags', 'to-top', 'upload', 'user', 'video-camera', 'windows', 'ie', 'chrome', 'home', 'loading'];
|
|
|
|
|
|
|
|
|
|
ReactDOM.render(<IconSet icons={icons1} />, document.getElementById('iconset-direction'));
|
|
|
|
|
ReactDOM.render(<IconSet icons={icons2} />, document.getElementById('iconset-hint'));
|
|
|
|
|
ReactDOM.render(<IconSet icons={icons3} />, document.getElementById('iconset-common'));
|
|
|
|
|
`````
|