Vuetify предоставляет мощный механизм для работы с темами и кастомизацией компонентов через CSS-переменные, что делает разработку гибкой и поддерживаемой. CSS-переменные позволяют динамически изменять цвета, отступы, размеры и другие стилистические параметры без необходимости пересборки приложения.
Vuetify использует CSS-переменные для определения цветов темы, оттенков, фоновых цветов компонентов и типографики. При инициализации Vuetify можно задать собственную тему, которая автоматически будет транслироваться в CSS-переменные:
import { createVuetify } from 'vuetify'
const vuetify = createVuetify({
theme: {
defaultTheme: 'customTheme',
themes: {
customTheme: {
dark: false,
colors: {
primary: '#1976D2',
secondary: '#424242',
accent: '#82B1FF',
error: '#FF5252',
info: '#2196F3',
success: '#4CAF50',
warning: '#FFC107',
},
},
},
},
})
После этого каждый цвет можно использовать через CSS-переменные вида:
background-color: var(--v-primary-base);
color: var(--v-secondary-base);
Ключевой момент: Vuetify автоматически генерирует тональные
вариации для каждой переменной (-lighten1,
-darken2 и т.д.), которые можно применять напрямую в
стилях:
border-color: var(--v-primary-darken2);
Одним из преимуществ использования CSS-переменных является возможность динамического переключения темы без перезагрузки страницы. Достаточно изменить значения переменных на root-уровне:
document.documentElement.style.setProperty('--v-primary-base', '#FF5722')
document.documentElement.style.setProperty('--v-secondary-base', '#607D8B')
В этом случае все компоненты Vuetify автоматически подхватят новые цвета. Это особенно удобно для реализации тёмного и светлого режимов, либо пользовательских настроек цвета интерфейса.
Vuetify 3 поддерживает использование CSS-переменных в inline стилях и scoped стилях компонентов. Например:
<template>
<v-btn class="custom-btn">Кнопка</v-btn>
</template>
<style scoped>
.custom-btn {
background-color: var(--v-primary-base);
color: var(--v-on-primary);
border-radius: 12px;
}
</style>
Здесь --v-on-primary автоматически подбирается Vuetify
как контрастный цвет к primary, что упрощает работу с
доступностью и визуальной гармонией.
Vuetify использует множество CSS-переменных для отдельных компонентов:
v-btn):
--v-btn-height, --v-btn-padding,
--v-btn-font-sizev-text-field):
--v-input-height, --v-input-label-color,
--v-input-border-colorv-card):
--v-card-background,
--v-card-border-radiusПример изменения стандартной высоты кнопки и отступов:
.v-btn {
height: var(--v-btn-height, 48px);
padding: var(--v-btn-padding, 0 16px);
}
Если задать переменные в глобальном :root, они будут
применяться ко всем кнопкам проекта:
:root {
--v-btn-height: 56px;
--v-btn-padding: 0 24px;
}
CSS-переменные поддерживают каскадность и наследование, что позволяет переопределять стили на уровне отдельных компонентов или секций приложения:
.custom-section {
--v-primary-base: #009688;
--v-btn-height: 60px;
}
Все кнопки внутри .custom-section автоматически примут
новый цвет и высоту, без изменения глобальных настроек.
При использовании Vuetify с TypeScript можно получать типизированные значения переменных через theme API:
import { useTheme } from 'vuetify'
const theme = useTheme()
const primaryColor = theme.current.value.colors.primary
Это удобно для динамических вычислений и интеграции с пользовательским интерфейсом, где требуется получать текущий цвет темы и применять его в вычисляемых стилях.
:root или
контейнера для специфических секций интерфейса.-lighten1, -darken2) для градиентов и
hover-эффектов.CSS-переменные в Vuetify позволяют не просто кастомизировать внешний вид, но и создавать динамически адаптивные интерфейсы, которые легко поддерживать и расширять. Их правильное использование обеспечивает чистоту кода и гибкость темизации.