CSS-переменные (или кастомные свойства) представляют собой мощный
инструмент для управления стилями компонентов Naive UI на уровне темы и
отдельных элементов. Они задаются с помощью синтаксиса
--имя-переменной и могут быть использованы внутри любого
свойства CSS через функцию var(--имя-переменной).
В Naive UI каждая тема компонента имеет набор предопределённых
CSS-переменных. Например, для компонента n-button
существуют переменные, влияющие на цвет фона,
цвет текста, отступы, радиус
скругления и тени. Это позволяет
централизованно изменять внешний вид всех кнопок в приложении без
необходимости переписывать каждый компонент вручную.
:root {
--n-button-color: #409eff;
--n-button-text-color: #ffffff;
--n-button-border-radius: 6px;
}
<n-button>Пример кнопки</n-button>
В данном примере кнопка автоматически наследует заданные переменные и
будет иметь синий фон, белый текст и скругленные углы. Изменение
переменной --n-button-color в :root обновит
все кнопки одновременно.
CSS-переменные в Naive UI организованы иерархически. Существует несколько уровней:
:root и применяются ко всем компонентам.style или class, имеют самый высокий
приоритет.Пример переопределения переменной только для конкретной кнопки:
<n-button style="--n-button-color: #67c23a;">Зелёная кнопка</n-button>
В этом случае глобальная переменная --n-button-color
будет проигнорирована для этой кнопки, и фон станет зелёным.
Naive UI позволяет менять тему приложения динамически, используя CSS-переменные. Обычно это делается через реактивное состояние, которое изменяет значения переменных:
<template>
<div :style="themeVariables">
<n-button>Тема меняется</n-button>
</div>
</template>
<script setup>
import { reactive } from 'vue'
const themeVariables = reactive({
'--n-button-color': '#f56c6c',
'--n-button-text-color': '#fff'
})
</script>
Изменение значений в объекте themeVariables мгновенно
обновляет внешний вид всех компонентов внутри div,
используя эти переменные.
CSS-переменные наследуются так же, как обычные свойства CSS. Это позволяет задавать базовую тему для всего приложения, а затем переопределять отдельные свойства внутри контейнеров или компонентов:
.theme-dark {
--n-button-color: #303133;
--n-button-text-color: #ffffff;
}
.theme-light {
--n-button-color: #409eff;
--n-button-text-color: #ffffff;
}
<div class="theme-dark">
<n-button>Тёмная кнопка</n-button>
</div>
<div class="theme-light">
<n-button>Светлая кнопка</n-button>
</div>
Такой подход упрощает управление сложными интерфейсами с множественными темами.
Некоторые компоненты Naive UI предоставляют прямой доступ к
CSS-переменным через пропсы. Например, у n-button можно
задать цвет через проп color, который автоматически
обновляет соответствующую переменную:
<n-button color="#e6a23c">Оранжевая кнопка</n-button>
При использовании пропа color переменная
--n-button-color будет установлена локально для этой
кнопки, что упрощает кастомизацию без прямого написания CSS.
Для сложных интерфейсов часто используют SCSS вместе с CSS-переменными. Это позволяет создавать вычисляемые значения и повторно использовать их:
$primary-color: #409eff;
:root {
--n-button-color: #{$primary-color};
--n-button-hover-color: darken($primary-color, 10%);
}
Также переменные могут быть динамически обновлены через Jav * aScript:
document.documentElement.style.setProperty('--n-button-color', '#67c23a')
Такой подход позволяет объединять возможности препроцессоров и реактивность CSS-переменных для максимальной гибкости.
calc().CSS-переменные в Naive UI — это фундаментальный инструмент для управления визуальным стилем компонентов, который обеспечивает гибкость, повторное использование и централизованное управление темами. Их правильное использование делает интерфейсы более масштабируемыми и легко кастомизируемыми.