В библиотеке Naive UI темизация отдельных
компонентов реализуется через свойства theme и
theme-overrides, позволяя изменять внешний вид компонентов
без глобального вмешательства в стиль приложения. Это особенно полезно
для проектов с разноцветными блоками, уникальными визуальными
требованиями или динамическими темами.
themeСвойство theme позволяет подключить один из встроенных
пресетов темы или объект с кастомными настройками. Например, Naive UI
предоставляет стандартные темы light и dark
для большинства компонентов:
import { NButton, createTheme, darkTheme } from 'naive-ui'
const customTheme = createTheme({
common: {
primaryColor: '#1E90FF',
borderRadius: '8px'
}
})
<NButton theme={customTheme}>Нажми меня</NButton>
common — общие настройки, применяемые
ко всем компонентам: цвета, радиусы, шрифты.component-specific — отдельные
настройки для конкретного компонента, например button,
input, card.theme-overridesДля более точечной настройки отдельных аспектов компонента
используется theme-overrides. Оно позволяет изменить
конкретные переменные компонента без необходимости создавать полную
кастомную тему.
<NButton
theme-overrides={{
Button: {
color: '#ffffff',
borderRadius: '12px',
boxShadow: '0 2px 4px rgba(0,0,0,0.2)'
}
}}
>
Кастомная кнопка
</NButton>
Особенности theme-overrides:
fontSize, padding, color,
border.Naive UI полностью совместим с реактивной системой Vue. Темы и переопределения можно менять на лету:
import { reactive } from 'vue'
import { NButton } from 'naive-ui'
const buttonTheme = reactive({
color: '#ff6347',
borderRadius: '16px'
})
<NButton :theme-overrides="{ Button: buttonTheme }">
Динамическая кнопка
</NButton>
Изменение значений в buttonTheme автоматически обновит
визуал компонента без перезагрузки страницы. Это позволяет реализовать
переключатели стиля или адаптивные темы.
theme и
theme-overridesДля сложных интерфейсов удобно комбинировать полную кастомную тему с локальными переопределениями:
<NButton
:theme="customTheme"
:theme-overrides="{
Button: {
color: '#32cd32',
boxShadow: '0 4px 6px rgba(0,0,0,0.3)'
}
}"
>
Гибридная кнопка
</NButton>
Преимущества такого подхода:
theme-overrides.Naive UI предоставляет отдельные объекты для каждого типа компонента. Ниже примеры наиболее часто кастомизируемых:
color,
borderRadius, boxShadow,
fontSize, textColor.borderColor,
hoverBorderColor, textColor,
placeholderColor.backgroundColor,
borderRadius, shadow,
padding.dropdownBackgroundColor,
optionHoverColor, textColor.<NInput
theme-overrides={{
Input: {
borderColor: '#ffa500',
textColor: '#333333',
placeholderColor: '#888888'
}
}}
placeholder="Введите текст"
/>
Для проектов с динамическими стилями удобно применять
computed свойства Vue для генерации темы:
import { computed } from 'vue'
const isDark = ref(false)
const buttonTheme = computed(() => ({
Button: {
color: isDark.value ? '#222222' : '#f5f5f5',
textColor: isDark.value ? '#f5f5f5' : '#222222'
}
}))
Переключение isDark.value мгновенно меняет внешний вид
всех связанных кнопок.
theme, уникальные — в
theme-overrides.Темизация отдельных компонентов в Naive UI позволяет создавать визуально разнообразные интерфейсы, управляя стилями на уровне каждого элемента без нарушения глобального дизайна.