Icon 图标

如果项目中使用的是 0.x 版本的基础组件(@icedesign/base, @ali/ice, @alife/next),请在左侧导航顶部切换组件版本。

安装方法

  1. 在命令行中执行以下命令npm install @alifd/next@latest -S

Q&A

  • Q: 如何添加自定义Icon呢?A: 默认提供部分基础 icon ,若要添加自定义 icon 可在 Fusion 设计中心新建主题,编辑主题中的Icon组件,完成后发布主题。每个主题是一个 npm 包,npm 包里面包含了主题变量、iconfont 地址等相关代码。在你的项目里引用该自定义主题包,更新主题包的版本即可(前提是你的项目/构建工具支持 Fusion 主题的使用)

注意事项

  • 若为装饰性icon,请设置通过设置 aria-hidden 忽略;若为按钮类型icon,请务必设置 role="button"aria-label

API

Icon

参数说明类型默认值
size指定图标大小可选值:'xxs', 'xs', 'small', 'medium', 'large', 'xl', 'xxl', 'xxxl', 'inherit'Enum'medium'
type指定显示哪种图标String-

代码示例

基本

展示图标基本使用方法。

Icon 图标 - 图1

查看源码在线预览

  1. import { Icon } from '@alifd/next';
  2. ReactDOM.render(<Icon type="atm" />, mountNode);

图标列表

点击图标复制代码。

Icon 图标 - 图2

查看源码在线预览

  1. import { Message, Icon } from '@alifd/next';
  2. import CopyToClipboard from 'react-copy-to-clipboard';
  3. const types = [
  4. 'smile', 'cry', 'success', 'warning', 'prompt',
  5. 'error', 'help', 'clock', 'success-filling', 'delete-filling',
  6. 'favorites-filling', 'add', 'minus', 'arrow-up', 'arrow-down',
  7. 'arrow-left', 'arrow-right', 'arrow-double-left', 'arrow-double-right', 'switch',
  8. 'sorting', 'descending', 'ascending', 'select', 'semi-select',
  9. 'loading', 'search', 'close', 'ellipsis', 'picture',
  10. 'calendar', 'ashbin', 'upload', 'download', 'set',
  11. 'edit', 'refresh', 'filter', 'attachment', 'account',
  12. 'email', 'atm'
  13. ];
  14. let customTypes = [];
  15. // The code here is for fusion dev display custom Icon components only
  16. if (window.customIcons) {
  17. customTypes = window.customIcons;
  18. }
  19. const handleCopy = () => Message.success('Copied!');
  20. ReactDOM.render(
  21. <div>
  22. <div className="icon-list-title">Click on the icon to copy the code.</div>
  23. <ul className="icon-list">
  24. {types.map((type, index) => (
  25. <CopyToClipboard key={index} text={`<Icon type="${type}" />`} onCopy={handleCopy}>
  26. <li>
  27. <Icon type={type} size="xl" />
  28. <span>{type}</span>
  29. </li>
  30. </CopyToClipboard>))}
  31. </ul>
  32. {
  33. customTypes.length ?
  34. <div>
  35. <div className="icon-list-custom-title">Custom Icon</div>
  36. <ul className="icon-list">
  37. {
  38. customTypes.map((type, index) => (
  39. <CopyToClipboard key={index} text={`<Icon type="${type}" />`} onCopy={handleCopy}>
  40. <li>
  41. <Icon type={type} size="xl" />
  42. <span>{type}</span>
  43. </li>
  44. </CopyToClipboard>))
  45. }
  46. </ul>
  47. </div> :
  48. null
  49. }
  50. </div>
  51. , mountNode);
  1. .icon-list-title {
  2. margin-bottom: 20px;
  3. font-size: 24px;
  4. color: #333;
  5. }
  6. .icon-list {
  7. margin: 0;
  8. padding: 0;
  9. list-style: none;
  10. }
  11. .icon-list li {
  12. display: inline-block;
  13. width: 140px;
  14. padding: 30px 0;
  15. color: #666;
  16. cursor: pointer;
  17. }
  18. .icon-list li:hover {
  19. color: #333;
  20. background-color: #f7f7f7;
  21. }
  22. .icon-list i {
  23. display: block;
  24. width: 32px;
  25. margin: 0 auto;
  26. }
  27. .icon-list span {
  28. display: block;
  29. margin-top: 10px;
  30. text-align: center;
  31. font-size: 14px;
  32. }
  33. .icon-list-custom-title {
  34. margin: 20px 0 20px 10px;
  35. font-size: 20px;
  36. color: #333;
  37. }

尺寸

ICON的尺寸包括:xxsxssmallmediumlargexlxxlxxxl, inherit

Icon 图标 - 图3

查看源码在线预览

  1. import { Icon } from '@alifd/next';
  2. const sizes = ['xxs', 'xs', 'small', 'medium', 'large', 'xl', 'xxl', 'xxxl'];
  3. const inherit = 'inherit';
  4. ReactDOM.render((
  5. <div>
  6. <ul className="icon-sizes">
  7. {sizes.map((size, index) => (
  8. <li key={index}>
  9. <Icon type="smile" size={size} />
  10. <span>{size}</span>
  11. </li>))}
  12. </ul>
  13. <span>{inherit}</span>
  14. <h4>
  15. Shall I compare thee to a summer's day? <Icon type="smile" size={inherit} /> <Icon type="set" size={inherit} />
  16. </h4>
  17. <h3>
  18. Thou art more lovely and more temperate. <Icon type="smile" size={inherit} /> <Icon type="set" size={inherit} />
  19. </h3>
  20. <h2>
  21. Rough winds do shake the darling buds of May, <Icon type="smile" size={inherit} /> <Icon type="set" size={inherit} />
  22. </h2>
  23. <h1>
  24. And summer's lease hath all too short a date. <Icon type="smile" size={inherit} /> <Icon type="set" size={inherit} />
  25. </h1>
  26. </div>
  27. ), mountNode);
  1. .icon-sizes {
  2. margin: 0;
  3. padding: 0;
  4. list-style: none;
  5. }
  6. .icon-sizes li {
  7. display: inline-block;
  8. width: 80px;
  9. height: 80px;
  10. }
  11. .icon-sizes i {
  12. display: block;
  13. margin: 12px auto 0 auto;
  14. text-align: center;
  15. }
  16. .icon-sizes span {
  17. display: block;
  18. margin-top: 10px;
  19. text-align: center;
  20. }

自定义样式

图标字体本质上还是文字,可以使用 style 和 className 设置图标的大小和颜色。

Icon 图标 - 图4

查看源码在线预览

  1. import { Icon } from '@alifd/next';
  2. ReactDOM.render(
  3. <div>
  4. <div className="icon-style-demo">
  5. <Icon type="success" style={{ color: '#1DC11D', marginRight: '10px' }} />
  6. This is a success message!
  7. </div>
  8. <div className="icon-style-demo">
  9. <Icon type="warning" style={{ color: '#FFA003', marginRight: '10px' }} />
  10. This is a warning message!
  11. </div>
  12. <div className="icon-style-demo">
  13. <Icon type="error" style={{ color: '#FF3333', marginRight: '10px' }} />
  14. This is a failure message!
  15. </div>
  16. </div>
  17. , mountNode);
  1. .icon-style-demo {
  2. height: 24px;
  3. line-height: 24px;
  4. margin-bottom: 10px;
  5. font-size: 16px;
  6. color: #333;
  7. }

无障碍

若为装饰性icon,请设置通过设置 aria-hidden 忽略;若为按钮类型icon,请务必设置 role="button"aria-label

Icon 图标 - 图5

查看源码在线预览

  1. import { Icon } from '@alifd/next';
  2. ReactDOM.render(<div>
  3. button: <br/>
  4. <Icon type="atm" role="button" aria-label="icon atm" style={{ margin:'5px' }}/>
  5. <Icon type="smile" role="button" aria-label="icon smile" style={{ margin:'5px' }}/>
  6. <br/>
  7. decoration: <br/>
  8. <Icon type="success" aria-hidden style={{ margin:'5px' }}/>
  9. </div>, mountNode);

相关区块

Icon 图标 - 图6

暂无相关区块