Skip to content

图标

用于生成一个图标。

基础用法

通过 NueIcon 标签生成图标。

通过 name 属性指定生成的图标。

<template>
    <nue-div>
        <nue-icon name="search" />
        <nue-icon name="share" />
        <nue-icon name="setting" />
        <nue-icon name="subscribe" />
    </nue-div>
</template>

大小和颜色

通过 size 属性指定图标大小,接受 CSS FontSize 的合法值,默认为 16px

通过 color 属性指定图标颜色,接受 CSS Color 的合法值,默认为字体颜色。

<template>
    <nue-div align="center">
        <nue-icon color="red" name="search" size="14px" />
        <nue-icon color="#A2A" name="share" size="var(--nue-text-md)" />
        <nue-icon color="rgb(0, 100, 255)" name="setting" size="1.25rem" />
    </nue-div>
</template>

图标自旋转

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

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

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

所有图标

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

<template>
    <nue-div align="stretch" vertical>
        <nue-input
            v-model="filterText"
            clearable
            icon="filter"
            placeholder="Filter icons by name"
        />
        <div class="icons">
            <nue-div v-for="icon in filteredIcons" :key="icon" class="icon">
                <nue-icon :name="icon" />
                <nue-text>{{ 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(110px, 1fr));
    gap: 1px;
    align-content: center;
    border-radius: var(--nue-primary-radius);
    border: 1px solid var(--nue-divider-color);
    box-sizing: border-box;
    background-color: var(--nue-divider-color);
    overflow: hidden;

    .icon {
        flex-direction: column;
        align-items: center;
        justify-content: center;
        flex-wrap: nowrap;
        gap: 4px;
        height: 96px;
        background-color: white;

        .nue-icon {
            --icon-size: var(--nue-text-lg);
        }

        .nue-text {
            font-size: var(--nue-text-xs);
        }
    }
}
</style>

Released under the MIT License.