Back to Ant Design

Icon

components/icon/index.en-US.md

6.3.77.7 KB
Original Source

How to use

Before using icons, you need to install the @ant-design/icons package:

<InstallDependencies npm='npm install @ant-design/[email protected] --save' yarn='yarn add @ant-design/[email protected]' pnpm='pnpm install @ant-design/[email protected] --save' bun='bun add @ant-design/[email protected]'></InstallDependencies>

<!-- prettier-ignore -->

:::info{title=Tips} Remember to use @ant-design/[email protected] with [email protected], see: #53275 :::

List of icons

<IconSearch></IconSearch>

Examples

<!-- prettier-ignore -->

<code src="./demo/basic.tsx">Basic</code> <code src="./demo/two-tone.tsx">Two-tone icon and colorful icon</code> <code src="./demo/custom.tsx">Custom Icon</code> <code src="./demo/iconfont.tsx">Use iconfont.cn</code> <code src="./demo/scriptUrl.tsx">Multiple resources from iconfont.cn</code>

API

Common Icon

PropertyDescriptionTypeDefaultVersion
classNameThe className of Iconstring-
rotateRotate by n degrees (not working in IE9)number-
spinRotate icon with animationbooleanfalse
styleThe style properties of icon, like fontSize and colorCSSProperties-
twoToneColorOnly supports the two-tone icon. Specify the primary colorstring (hex color)-

We still have three different themes for icons, icon component name is the icon name suffixed by the theme name.

jsx
import { StarOutlined, StarFilled, StarTwoTone } from '@ant-design/icons';

<StarOutlined />
<StarFilled />
<StarTwoTone twoToneColor="#eb2f96" />

Custom Icon

PropertyDescriptionTypeDefaultVersion
componentThe component used for the root nodeComponentType<CustomIconComponentProps>-
rotateRotate degrees (not working in IE9)number-
spinRotate icon with animationbooleanfalse
styleThe style properties of icon, like fontSize and colorCSSProperties-

About SVG icons

We introduced SVG icons in version 3.9.0, replacing font icons. This has the following benefits:

  • Complete offline usage of icons, without dependency on a CDN-hosted font icon file (No more empty square during downloading and no need to deploy icon font files locally either!)
  • Much more display accuracy on lower-resolution screens
  • The ability to choose icon color
  • No need to change built-in icons with overriding styles by providing more props in component

More discussion of SVG icon reference at #10353.

⚠️ Given the extra bundle size caused by all SVG icons imported in 3.9.0, we will provide a new API to allow developers to import icons as needed, you can track #12011 for updates.

While you wait, you can use webpack plugin from the community to chunk the icon file.

The properties theme, component and twoToneColor were added in 3.9.0. The best practice is to pass the property theme to every <Icon /> component.

jsx
import { MessageOutlined } from '@ant-design/icons';

<MessageOutlined style={{ fontSize: '16px', color: '#08c' }} />;

All the icons will render to <svg>. You can still set style and className for size and color of icons.

jsx
<Icon type="message" style={{ fontSize: '16px', color: '#08c' }} theme="outlined" />

Set TwoTone Color

When using the two-tone icons, you can use the static methods getTwoToneColor() and setTwoToneColor(colorString) to specify the primary color.

jsx
import { getTwoToneColor, setTwoToneColor } from '@ant-design/icons';

setTwoToneColor('#eb2f96');
getTwoToneColor(); // #eb2f96

Custom Font Icon

We added a createFromIconfontCN function to help developer use their own icons deployed at iconfont.cn in a convenient way.

This method is specified for iconfont.cn.

jsx
import React from 'react';
import { createFromIconfontCN } from '@ant-design/icons';
import ReactDOM from 'react-dom/client';

const MyIcon = createFromIconfontCN({
  scriptUrl: '//at.alicdn.com/t/font_8d5l8fzk5b87iudi.js', // generate in iconfont.cn
});

ReactDOM.createRoot(mountNode).render(<MyIcon type="icon-example" />);

It creates a component that uses SVG sprites in essence.

The following options are available:

PropertyDescriptionTypeDefaultVersion
extraCommonPropsDefine extra properties to the component{ [key: string]: any }{}
scriptUrlThe URL generated by iconfont.cn project. Support string[] after @ant-design/[email protected]string | string[]-

The property scriptUrl should be set to import the SVG sprite symbols.

See iconfont.cn documents to learn about how to generate scriptUrl.

Custom SVG Icon

You can import SVG icon as a react component by using webpack and @svgr/webpack. @svgr/webpack's options reference.

js
// webpack.config.js
module.exports = {
  // ... other config
  test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
  use: [
    {
      loader: 'babel-loader',
    },
    {
      loader: '@svgr/webpack',
      options: {
        babel: false,
        icon: true,
      },
    },
  ],
};

You can import SVG icon as a react component by using vite and vite-plugin-svgr. @svgr/webpack's options reference.

js
// vite.config.js
export default defineConfig(() => ({
  // ... other config
  plugins: [svgr({ svgrOptions: { icon: true } })],
}));
jsx
import React from 'react';
import Icon from '@ant-design/icons';
import MessageSvg from 'path/to/message.svg'; // path to your '*.svg' file.

// import MessageSvg from 'path/to/message.svg?react'; // use vite path to your '*.svg?react' file.
import ReactDOM from 'react-dom/client';

// in create-react-app:
// import { ReactComponent as MessageSvg } from 'path/to/message.svg';

ReactDOM.createRoot(mountNode).render(<Icon component={MessageSvg} />);

The following properties are available for the component:

PropertyDescriptionTypeReadonlyVersion
classNameThe computed class name of the svg elementstring-
fillDefine the color used to paint the svg elementstringcurrentColor
heightThe height of the svg elementstring | number1em
styleThe computed style of the svg elementCSSProperties-
widthThe width of the svg elementstring | number1em

Design Token

<ComponentTokenTable component="Icon"></ComponentTokenTable>

FAQ

Why does icon style sometimes cause global style error? {#faq-icon-bad-style}

Related issue: #54391

When enable layer, icon style may deprioritize @layer antd and cause all components to be styled abnormally.

This problem can be resolved by two steps below:

  1. use @ant-design/[email protected] with [email protected].
  2. stop to use static methods of message, Modal and notification. use hooks version or App provided instance.

If you must use static methods, you can put any of icon components just under App, what helps to avoid style impact caused by static methods.

diff
<StyleProvider layer>
  <ConfigProvider>
    <App>
+
+     <RightOutlined />
    </App>
  </ConfigProvider>
</StyleProvider>