Element Plus активно использует возможности CSS-переменных для управления стилями компонентов. Переменные позволяют централизованно задавать цвета, размеры, отступы, шрифты и другие параметры, обеспечивая гибкость и удобство кастомизации интерфейса. Они определяются в корневом элементе документа или в специфических файлах стилей и могут переопределяться на уровне отдельных компонентов.
В Element Plus переменные CSS обычно имеют префикс
--el-, что упрощает идентификацию и предотвращает конфликты
с другими стилями. Пример базового определения переменных:
:root {
--el-color-primary: #409eff;
--el-color-success: #67c23a;
--el-color-warning: #e6a23c;
--el-color-danger: #f56c6c;
--el-font-size-base: 14px;
--el-border-radius-base: 4px;
}
Ключевые моменты:
--el-color-primary — основной цвет интерфейса.--el-font-size-base — базовый размер текста для
компонентов.--el-border-radius-base — скругление углов
элементов.Эти переменные могут использоваться в стилях компонентов через
функцию var():
.el-button {
background-color: var(--el-color-primary);
border-radius: var(--el-border-radius-base);
font-size: var(--el-font-size-base);
}
CSS-переменные позволяют переопределять значения на уровне компонентов или контейнеров. Например, для создания кнопки с индивидуальной цветовой схемой можно использовать:
.custom-button {
--el-color-primary: #ff6600;
--el-border-radius-base: 8px;
}
В результате кнопка, использующая .custom-button,
наследует эти значения без изменения глобальных настроек.
Element Plus поддерживает темизацию через CSS-переменные. Для создания светлой или тёмной темы достаточно определить набор переменных для каждого режима:
/* Светлая тема */
.theme-light {
--el-color-primary: #409eff;
--el-background-color: #ffffff;
--el-text-color: #303133;
}
/* Тёмная тема */
.theme-dark {
--el-color-primary: #1f2d3d;
--el-background-color: #303133;
--el-text-color: #ffffff;
}
Переключение темы осуществляется добавлением соответствующего класса к корневому элементу:
document.documentElement.classList.add('theme-dark');
document.documentElement.classList.remove('theme-light');
CSS-переменные можно менять программно, что позволяет создавать интерактивные интерфейсы и настраивать стили в реальном времени:
const root = document.documentElement;
// Изменение основного цвета
root.style.setProperty('--el-color-primary', '#ff4d4f');
// Изменение скругления углов
root.style.setProperty('--el-border-radius-base', '12px');
Это особенно удобно при построении конструкторов интерфейса или кастомизации пользовательских тем.
Element Plus предоставляет SCSS-файлы для тонкой настройки, где CSS-переменные могут быть заданы через SCSS-переменные:
$--color-primary: #409eff;
$--border-radius-base: 4px;
@import "element-plus/theme-chalk/base.scss";
В процессе сборки SCSS переменные преобразуются в CSS-переменные, что
сохраняет совместимость с динамическим переопределением через
var().
--el- для всех
переменных, чтобы избежать конфликтов с другими библиотеками.:root для глобальной стилизации.Кастомизация кнопки с темой и динамическим цветом:
<template>
<el-button class="theme-button">Нажми меня</el-button>
</template>
<style>
.theme-button {
--el-color-primary: #f56c6c;
--el-border-radius-base: 10px;
background-color: var(--el-color-primary);
border-radius: var(--el-border-radius-base);
color: white;
font-size: var(--el-font-size-base);
}
</style>
<script>
const button = document.querySelector('.theme-button');
button.addEventListener('mouseenter', () => {
document.documentElement.style.setProperty('--el-color-primary', '#67c23a');
});
button.addEventListener('mouseleave', () => {
document.documentElement.style.setProperty('--el-color-primary', '#f56c6c');
});
</script>
В этом примере кнопка меняет цвет при наведении, используя глобальные CSS-переменные, и сохраняет индивидуальное скругление и размер шрифта, демонстрируя мощь сочетания CSS-переменных с динамическим поведением.
Хотите, я подготовлю следующую главу про CSS-переменные для анимаций и переходов в Element Plus с практическими примерами?