element-plus/docs/en-US/component/icon.md
2022-04-28 12:35:11 +08:00

227 lines
6.1 KiB
Markdown

---
title: Icon
lang: en-US
---
# Icon
Element Plus provides a set of common icons.
## Icon Usage
- If you want to **use directly** like the example, you need to [globally register](https://v3.vuejs.org/guide/component-registration.html#global-registration) the components before using it.
- If you want to see all available SVG icons please check [@element-plus/icons-vue](https://unpkg.com/browse/@element-plus/icons-vue@latest/dist/es/) and the source [element-plus-icons](https://github.com/element-plus/element-plus-icons) out or [Icon Collection](#icons-collection)
## Installation
### Using packaging manager
```shell
# Choose a package manager you like.
# NPM
$ npm install @element-plus/icons-vue
# Yarn
$ yarn add @element-plus/icons-vue
# pnpm
$ pnpm install @element-plus/icons-vue
```
### Register All Icons
You need import all icons from `@element-plus/icons-vue` and register them globally.
```ts
// main.ts
// if you're using CDN, please remove this line.
import * as ElementPlusIconsVue from '@element-plus/icons-vue'
const app = createApp(App)
for ([key, component] of Object.entries(ElementPlusIconsVue)) {
app.component(key, component)
}
```
You can also refer to [this template](https://codepen.io/sxzz/pen/xxpvdrg).
### Import in Browser
Import Element Plus Icons through browser HTML tags directly, and use global variable `ElementPlusIconsVue`.
According to different CDN providers, there are different introduction methods.
Here we use [unpkg](https://unpkg.com) and [jsDelivr](https://jsdelivr.com) as example.
You can also use other CDN providers.
#### unpkg
```html
<script src="//unpkg.com/@element-plus/icons-vue"></script>
```
#### jsDelivr
```html
<script src="//cdn.jsdelivr.net/npm/@element-plus/icons-vue"></script>
```
:::tip
We recommend using CDN to import Element Plus users to lock the version
on the link address, so as not to be affected by incompatible updates when Element Plus
is upgraded in the future. Please check [unpkg.com](https://unpkg.com) for
the method to lock the version.
:::
### Auto Import
Use [unplugin-icons](https://github.com/antfu/unplugin-icons) and [unplugin-auto-import](https://github.com/antfu/unplugin-auto-import)
to automatically import any icon collections from iconify.
You can refer to [this template](https://github.com/sxzz/element-plus-best-practices/blob/db2dfc983ccda5570033a0ac608a1bd9d9a7f658/vite.config.ts#L21-L58).
## Simple Usage
:::warning
Because HTML standard has already defined a tag named [menu](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/menu),
so you need to use an alias in order to render the icon, if you register `Menu` directly it will not work.
:::
```vue
<!-- Use el-icon to provide attributes to SVG icon -->
<template>
<div>
<el-icon :size="size" :color="color">
<edit />
</el-icon>
<!-- Or use it independently without derive attributes from parent -->
<edit />
</div>
</template>
```
<vp-script setup>
import { Edit, Share, Delete, Search, Loading } from '@element-plus/icons-vue'
</vp-script>
<ElRow>
<div>
<ElIcon :size="30">
<Edit />
</ElIcon>
<Edit />
</div>
</ElRow>
## Combined with el-icon
`el-icon` provides extra attributes for raw SVG icon, for more detail, please read to the end.
```vue
<template>
<p>
with extra class <b>is-loading</b>, your icon is able to rotate 360 deg in 2
seconds, you can also override this
</p>
<el-icon :size="20">
<edit />
</el-icon>
<el-icon color="#409EFC" class="no-inherit">
<share />
</el-icon>
<el-icon>
<delete />
</el-icon>
<el-icon class="is-loading">
<loading />
</el-icon>
<el-button type="primary">
<el-icon style="vertical-align: middle">
<search />
</el-icon>
<span style="vertical-align: middle"> Search </span>
</el-button>
</template>
```
<ElRow>
<p>
with extra class <b>is-loading</b>, your icon is able to rotate 360 deg in 2
seconds, you can also override this
</p>
<div style="display: flex; align-items: center; justify-content: space-between; width: 100%;">
<ElIcon :size="20">
<Edit />
</ElIcon>
<ElIcon color="#409EFC" class="no-inherit">
<Share />
</ElIcon>
<ElIcon>
<Delete />
</ElIcon>
<ElIcon class="is-loading">
<Loading />
</ElIcon>
<ElButton type="primary">
<ElIcon style="vertical-align: middle; color: #fff;">
<Search />
</ElIcon>
<span style="vertical-align: middle;"> Search </span>
</ElButton>
</div>
</ElRow>
## Using SVG icon directly
```vue
<template>
<div style="font-size: 20px">
<!-- Since svg icons do not carry any attributes by default -->
<!-- You need to provide attributes directly -->
<edit style="width: 1em; height: 1em; margin-right: 8px" />
<share style="width: 1em; height: 1em; margin-right: 8px" />
<delete style="width: 1em; height: 1em; margin-right: 8px" />
<search style="width: 1em; height: 1em; margin-right: 8px" />
</div>
</template>
```
<ElRow>
<div style="font-size: 20px;">
<!-- Since svg icons do not carry any attributes by default -->
<!-- You need to provide attributes directly -->
<Edit style="width: 1em; height: 1em; margin-right: 8px;" />
<Share style="width: 1em; height: 1em; margin-right: 8px;" />
<Delete style="width: 1em; height: 1em; margin-right: 8px;" />
<Search style="width: 1em; height: 1em; margin-right: 8px;" />
</div>
</ElRow>
## Icon Collection
:::tip
**You can use SVG icon in any version** as long as you install it
**You can click the icon to copy it**
:::
<IconList />
## Icon Attributes
| Attribute | Description | Type | Acceptable Value | Default |
| --------- | -------------------------- | ------------------------------ | ---------------- | ---------------------- |
| color | SVG tag's fill attribute | Pick\<CSSProperties, 'color'\> | - | inherit from color |
| size | SVG icon size, size x size | number \| string | - | inherit from font size |
## Icon Slots
| Name | Description |
| ---- | ------------------------- |
| — | customize default content |