Naive UI предоставляет удобный способ интеграции иконок в
интерфейсные компоненты. Библиотеки иконок позволяют использовать
графические элементы, которые повышают читаемость интерфейса и делают
его визуально привлекательным. В Naive UI поддерживается работа с
SVG-иконками и сторонними библиотеками, такими как @vicons,
ant-design-icons, feather-icons и другие.
Иконки в Naive UI можно использовать двумя способами: как встроенные
компоненты и как кастомные SVG-элементы. Встроенные иконки интегрированы
через компонент NIcon, который автоматически подстраивается
под стиль и размеры контрола, в котором используется.
import { NButton, NIcon } from 'naive-ui'
import { CloseOutline } from '@vicons/ionicons5'
<NButton>
<NIcon>
<CloseOutline />
</NIcon>
Закрыть
</NButton>
В этом примере <NIcon> оборачивает компонент
иконки, предоставленный библиотекой @vicons/ionicons5,
обеспечивая единообразный масштаб и стилизацию в рамках темы Naive
UI.
Для подключения сторонней библиотеки иконок используется стандартный
импорт компонентов. Важно учитывать, что каждая библиотека имеет
собственный набор иконок и формат экспорта. Например, для
ant-design-icons:
import { NIcon } from 'naive-ui'
import { SearchOutlined, DeleteOutlined } from '@ant-design/icons-vue'
<NIcon component={SearchOutlined} />
<NIcon component={DeleteOutlined} />
Здесь свойство component позволяет передать иконку
напрямую в NIcon, что упрощает её использование в различных
компонентах.
Naive UI поддерживает использование кастомных SVG через
NIcon. Для этого достаточно передать SVG как
Vue-компонент:
const CustomIcon = {
render() {
return (
<svg viewBox="0 0 24 24" width="24" height="24" fill="currentColor">
<path d="M12 2L15 8H9L12 2Z" />
</svg>
)
}
}
<NIcon>
<CustomIcon />
</NIcon>
Использование fill="currentColor" позволяет иконке
автоматически подстраиваться под цвет текста или тему компонента.
Размер иконок в Naive UI задается через проп size в
компоненте NIcon:
<NIcon size="24">
<CloseOutline />
</NIcon>
Поддерживаются единицы в пикселях (px) и числовые
значения. Кроме того, иконки наследуют цвет родительского компонента,
что позволяет интегрировать их в кнопки, тултипы и меню без
дополнительной стилизации.
Иконки тесно интегрированы с компонентами библиотеки:
NButton поддерживает слот для
иконки через NIcon.NMenu позволяет
добавлять иконки к элементам меню.NInput имеет слоты
prefix и suffix для вставки иконок.Пример для поля ввода с иконкой поиска:
<NInput placeholder="Поиск">
<template #prefix>
<NIcon component={SearchOutlined} />
</template>
</NInput>
При работе с большим количеством иконок рекомендуется использовать ленивую загрузку или импорт отдельных иконок вместо целых библиотек. Это снижает размер итогового бандла и повышает производительность приложения:
import { defineAsyncComponent } from 'vue'
const LazySearchIcon = defineAsyncComponent(() =>
import('@ant-design/icons-vue/lib/icons/SearchOutlined')
)
Naive UI автоматически адаптирует иконки к текущей теме. Для
изменения цвета иконки вручную используется CSS-переменная
--n-color или color:
.custom-icon {
color: #ff4d4f;
}
<NIcon class="custom-icon">
<DeleteOutlined />
</NIcon>
Таким образом, иконки становятся полностью управляемыми и интегрируемыми в стилизованные интерфейсы.
prefix и suffix для
иконок в интерактивных компонентах.fill="currentColor".size, а не через CSS
напрямую, для корректного масштабирования в разных компонентах.Эти подходы обеспечивают единообразие интерфейса, минимальный размер бандла и полное соответствие стилю Naive UI.