# Студия тем
Не хотите ограничиваться пресетами? Выберите в студии ниже пресет как отправную точку, настройте каждый токен под свою палитру — область предпросмотра обновится в реальном времени, а на выходе получится scss-файл, который можно поместить прямо в проект — без перекомпиляции библиотеки компонентов.
主要文字·常规文字·次要文字
Токены, которые вы редактируете, применяются только к области предпросмотра (тот же механизм, что у ConfigProvider). Экспортированный файл также поддерживает тёмную тему.
# Принятие экспортированной темы
Файл, экспортируемый студией, выглядит так (источник токенов — @lh-ui/share/styles/theme/common/var.scss):
@use '@lh-ui/share/styles/index.scss';
:root {
--lh-primary-color: #2B4C7C;
/* ... */
}
[data-theme='dark'],
.dark {
--lh-primary-color-bg: color-mix(in srgb, var(--lh-primary-color) 25%, transparent);
--lh-selected-color: color-mix(in srgb, var(--lh-primary-color) 40%, #fff);
}
Два способа применения:
Способ 1: статическое подключение (рекомендуется) — поместите экспортированный lh-theme.scss в проект и подключите его во входной точке:
// main.js
import './lh-theme.scss'
@use '@lh-ui/share/styles/index.scss' уже включает все стили компонентов и токены темы — одной строки достаточно;
тёмный блок и пресет-механизм share имеют общее происхождение, при data-theme="dark" переключение происходит автоматически.
Способ 2: внедрение во время выполнения — локальное переопределение через prop themeVars компонента LhConfigProvider (ключи в сокращённой форме, префикс --lh- добавляется автоматически); подходит, когда на одной странице соседствуют несколько тем:
<template>
<LhConfigProvider :theme-vars="{ primaryColor: '#2B4C7C', onPrimary: '#FFFFFF' }">
<LhButton type="primary">Главная кнопка</LhButton>
</LhConfigProvider>
</template>
<script>
import { LhConfigProvider, LhButton } from '@lh-ui/vue2'
export default {
components: { LhConfigProvider, LhButton },
}
</script>
Примеры кода везде используют npm-имёна пакетов (
@lh-ui/vue2/@lh-ui/share) — копируйте и используйте; реальная работа этого сайта документации идёт на локальных исходниках семейства, поэтому изменения видны сразу.
# Замечания
- Для светлого основного цвета необходимо явно объявить
--lh-color-on-primary: белый текст на светлом основном цвете не соответствует контрасту AA (4.5:1), поэтому в пресетах 松花绿 (зелёный сосны) и 藤黄 (gamboge) используется тёмный текст. Поле «Текст на основном цвете» в студии соответствует этому токену. - Если
--lh-selected-colorоставить пустым, он следует стандартной цепочке--lh-primary-color-active; при светлом основном цвете выделенный текст часто приходится отдельно затемнять (в пресетах это также учтено). - Контрастный гейт:
pnpm verify:themeв share пересчитывает AA-контраст каждого пресета по реальным парам потребления; для пользовательской темы рекомендуется проверить себя по инструкциям в Темы.
← Темы
Copyright © 2024-2026 FengMo WenXue