Icon в библиотеке Naive UI является универсальным инструментом для отображения векторных иконок в интерфейсе. Он интегрируется с системой дизайна Naive UI, поддерживает кастомизацию через свойства и стили, и позволяет использовать как встроенные, так и сторонние SVG-иконки.
Для начала необходимо импортировать компонент NIcon
из пакета naive-ui:
import { NIcon } from 'naive-ui'
Простейший пример использования:
<template>
<n-icon :component="iconComponent" />
</template>
<script setup>
import { HomeOutline } from '@vicons/ionicons5'
const iconComponent = HomeOutline
</script>
Ключевой момент: свойство component принимает компонент
SVG, что делает NIcon гибким для работы с любой
системой иконок, совместимой с Vue.
Можно использовать кастомные SVG напрямую, не импортируя библиотеки иконок. Например:
<template>
<n-icon>
<svg viewBox="0 0 24 24" fill="currentColor">
<path d="M12 2L2 22h20L12 2z"/>
</svg>
</n-icon>
</template>
Особенности:
fill="currentColor" позволяет иконке
наследовать цвет родительского текста.Компонент NIcon имеет свойство size,
которое управляет размером иконки:
<n-icon :component="iconComponent" size="24" />
<n-icon :component="iconComponent" size="2em" />
Поддерживаются:
24) — интерпретируются как
пиксели.'2em', '1.5rem') —
позволяют использовать относительные единицы для адаптивного
интерфейса.Свойство style или CSS-классы позволяют полностью
контролировать цвет иконки:
<n-icon :component="iconComponent" style="color: #42b983; font-size: 32px;" />
Важно:
color или атрибут
fill="currentColor" внутри SVG.Naive UI не ограничивается встроенными иконками. Наиболее популярны интеграции с:
@vicons/ionicons5@vicons/mdiПример интеграции с Material Design Icons:
import { MdHome } from '@vicons/mdi'
<n-icon :component="MdHome" size="32" />
Такой подход обеспечивает:
Компонент NIcon можно использовать внутри кнопок и кликабельных элементов:
<n-button>
<n-icon :component="iconComponent" size="20" />
Домой
</n-button>
Особенности:
Для приложений с большим количеством иконок рекомендуется использовать динамическую подгрузку:
<template>
<n-icon :component="currentIcon" />
</template>
<script setup>
import { ref } from 'vue'
import * as Icons from '@vicons/ionicons5'
const currentIcon = ref(Icons.HomeOutline)
// Для смены иконки
function changeIcon(name) {
currentIcon.value = Icons[name]
}
</script>
Преимущества:
С помощью CSS можно добавлять анимации и эффекты вращения, масштабирования, изменения цвета:
<n-icon :component="iconComponent" class="rotating-icon" />
<style>
.rotating-icon {
animation: rotate 2s linear infinite;
}
@keyframes rotate {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
</style>
<transition>) для плавного появления иконок.fill="currentColor" для
SVG, чтобы иконки автоматически подстраивались под цвет темы.size, а
не жестко через CSS, для унификации интерфейса.Компонент NIcon обеспечивает максимальную гибкость для работы с иконками в приложениях на Vue с использованием Naive UI, поддерживая кастомизацию, интеграцию сторонних библиотек и динамическое управление состояниями.