Skip to content

图标

生成一个图标。

基础用法

通过组件标签 NueIcon 声明一个图标组件。

图标组件目前仅支持 Iconfont 形式,通过属性 name 指定图标内容。

<template>
    <nue-icon name="search" />
</template>

大小

通过属性 size 指定图标大小,接受 CSS FontSize 的合法值,默认继承父元素。

<template>
    <nue-div align="center">
        <nue-icon name="search" size="16px" />
        <nue-icon name="search" size="1.5rem" />
        <nue-icon name="search" size="var(--custom-icon-size)" />
    </nue-div>
</template>

<script lang="ts" setup></script>

<style scoped>
.nue-icon {
    --custom-icon-size: 2rem;
}
</style>

颜色

通过属性 color 指定图标颜色,接受 CSS Color 的合法值,默认继承父元素。

<template>
    <nue-div>
        <nue-icon color="red" name="search" />
        <nue-icon color="#00FF00" name="search" />
        <nue-icon color="var(--custom-icon-color)" name="search" />
    </nue-div>
</template>

<script lang="ts" setup></script>

<style scoped>
.nue-icon {
    --custom-icon-color: rgb(0, 0, 255);
}
</style>

图标自旋转

通过属性 spin 指定图标是否自旋转,接受布尔类型值,默认为 false

通过属性 spin-speed 指定图标自旋转速度,接受 CSS Duration 合法值,默认为 2s

<template>
    <nue-div>
        <nue-icon name="refresh" spin />
        <nue-icon name="refresh" spin spin-speed="1s" />
    </nue-div>
</template>

所有图标

下方表格列出了所有可用的图标名称,通过 name 属性指定即可使用对应图标。

<template>
    <nue-div align="stretch" vertical>
        <nue-input v-model="filterText" clearable icon="filter" placeholder="筛选" />
        <div class="icons">
            <nue-div v-for="icon in filteredIcons" :key="icon" class="icon-block">
                <nue-icon size="1.75rem" :name="icon" />
                <nue-text size=".875rem">{{ icon }}</nue-text>
            </nue-div>
        </div>
    </nue-div>
</template>

<script setup>
import { computed, ref } from 'vue';

const filterText = ref('');
const icons = [
    'archive',
    'inbox-fill',
    'inbox',
    'square-check-fill',
    'square-check',
    'square',
    'check',
    'priority-1',
    'priority-2',
    'priority-3',
    'select',
    'connection',
    'logo',
    'lock',
    'files',
    'menu',
    'arrow-right-more',
    'arrow-left-more',
    'projects',
    'board',
    'drive',
    'plus',
    'location',
    'download',
    'upload',
    'picture',
    'history',
    'chat',
    'subscribe',
    'refresh',
    'warning',
    'setting',
    'loading',
    'eye',
    'clear',
    'fail',
    'tag',
    'more-vertical',
    'heart',
    'edit',
    'help',
    'success',
    'more',
    'share',
    'calendar',
    'calendar-wrap',
    'filter',
    'delete',
    'search',
    'circle',
    'ring',
    'plus-circle',
    'heart-fill',
    'success-fill',
    'completed',
    'plus-circle-fill',
    'more2',
    'mail',
    'theme',
    'scan',
    'eye-close',
    'arrow-right',
    'arrow-left',
    'arrow-down',
    'arrow-up'
];

const filteredIcons = computed(() => {
    return icons.filter(icon => icon.includes(filterText.value));
});
</script>

<style scoped>
.icons {
    width: 100%;
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(8rem, 1fr));
    box-sizing: border-box;
    overflow: hidden;

    .icon-block {
        flex-direction: column;
        align-items: center;
        justify-content: center;
        flex-wrap: nowrap;
        gap: 0.5rem;
        height: 96px;
        background-color: white;
    }
}
</style>

Released under the MIT License.