Element Plus предоставляет мощную систему компонентов с предопределёнными стилями, которые обеспечивают единообразный интерфейс. Однако для реализации уникального дизайна часто требуется переопределение этих стилей. Рассмотрим основные подходы и нюансы работы с кастомизацией.
Каждый компонент Element Plus содержит собственные классы, по которым можно обращаться в CSS. Для переопределения стилей используется комбинация селекторов и каскадности.
Пример переопределения кнопки:
.el-button {
background-color: #1f8ef1; /* новый фон */
color: #ffffff; /* цвет текста */
border-radius: 8px; /* скругление углов */
}
.el-button--primary {
font-weight: bold;
}
Важно: прямое переопределение через глобальный CSS
может быть перезаписано внутренними стилями компонента. Чтобы обеспечить
стабильное применение, рекомендуется использовать
deep selector в рамках
<style scoped>:
<style scoped>
/deep/ .el-button {
background-color: #1f8ef1;
}
</style>
В Vue 3 с scoped используется также синтаксис
::v-deep:
<style scoped>
::v-deep(.el-button) {
background-color: #1f8ef1;
}
</style>
Element Plus активно использует CSS-переменные для базовой темы компонентов. Они позволяют менять цвета, шрифты и отступы без прямого вмешательства в CSS.
Основные переменные:
:root {
--el-color-primary: #409eff; /* основной цвет */
--el-color-success: #67c23a; /* успех */
--el-color-warning: #e6a23c; /* предупреждение */
--el-color-danger: #f56c6c; /* ошибка */
--el-border-radius-base: 4px; /* радиус границ */
}
Для изменения темы глобально достаточно определить эти переменные в корневом элементе приложения. Для компонентов с динамическими цветами переменные автоматически применяются без дополнительных селекторов.
Пример глобального изменения темы:
:root {
--el-color-primary: #ff6b6b;
--el-border-radius-base: 12px;
}
Многие компоненты Element Plus предоставляют props для настройки внешнего вида. Это безопасный способ кастомизации, который не требует вмешательства в CSS.
Пример кнопки с пользовательскими стилями через props:
<el-button type="primary" size="large" :style="{ backgroundColor: '#ff6b6b', borderRadius: '12px' }">
Кастомная кнопка
</el-button>
Особенности:
type, size, plain,
round и другие позволяют быстро изменять вид.Element Plus построен с использованием SCSS, что позволяет подключать собственные переменные и миксины при сборке. Этот метод особенно полезен при разработке большого проекта с единой темой.
Пример переопределения переменных SCSS:
@use "element-plus/theme-chalk/src/index" with (
$--color-primary: #ff6b6b,
$--border-radius-base: 12px
);
Примечания:
Переопределяя стили, важно учитывать порядок и приоритет:
:style) — самый высокий
приоритет.::v-deep — применяется ко
всем вложенным компонентам.Ошибки в приоритетности часто приводят к ситуации, когда новые стили не видны, несмотря на их объявление.
Element Plus активно использует псевдоклассы и модификаторы для состояний: hover, active, disabled, focus. Для полной кастомизации необходимо учитывать эти состояния.
Пример кнопки:
.el-button {
background-color: #1f8ef1;
color: #fff;
}
.el-button:hover {
background-color: #1066b2;
}
.el-button:disabled {
background-color: #dcdfe6;
color: #a6abb4;
}
Особенности:
is- (например,
is-active, is-disabled).scoped необходимо включать
::v-deep для псевдоклассов.Для приложений с переключением темы можно менять CSS-переменные через Jav * aScript:
function setPrimaryColor(color) {
document.documentElement.style.setProperty('--el-color-primary', color);
}
setPrimaryColor('#ff6b6b');
Эта методика позволяет реализовать динамическую смену темы без пересборки проекта.
::v-deep или inline-стили
через :style.hover,
disabled, focus) для сохранения корректного
UX.Эти подходы обеспечивают полное управление стилями компонентов Element Plus, позволяя создавать уникальные интерфейсы без нарушения функциональности библиотеки.