Skip to content

主题定制

Lucky UI 基于完整的 Design Token 体系构建,支持三种层次的自定义。

Design Token 层次

┌─────────────────────────────────────────────┐
│  组件样式层  (lk-button / lk-input / ...)    │  ← 使用 CSS 变量
├─────────────────────────────────────────────┤
│  语义 Token  (--lk-color-primary / ...)     │  ← 语义映射
├─────────────────────────────────────────────┤
│  基础 Token  ($color-brand-600 / ...)       │  ← SCSS 变量
└─────────────────────────────────────────────┘

快速修改品牌色

在引入主题 SCSS 之前覆盖 $color-brand-base 变量:

scss
// src/uni.scss

// 1. 覆盖品牌主色(其余色阶自动推导)
$color-brand-base: #0ea5e9;   // 改为青蓝色

// 2. 引入主题
@use './uni_modules/lucky-ui/theme/src/index.scss';

CSS 变量覆盖(运行时)

所有间距、颜色、圆角均通过 CSS 变量暴露,可在任意层级覆盖:

css
/* 全局覆盖 */
:root {
  --lk-color-primary: #10b981;
  --lk-color-primary-light: rgba(16, 185, 129, 0.12);
  --lk-radius-base: 12rpx;
  --lk-radius-lg: 20rpx;
}

/* 局部覆盖(仅影响某个容器内的组件) */
.my-page {
  --lk-color-primary: #f59e0b;
}

暗色模式

Lucky UI 基于 CSS 类名切换明暗主题。
在应用根节点添加 lk-theme-dark 类即可:

vue
<template>
  <view :class="isDark ? 'lk-theme-dark' : 'lk-theme-light'">
    <!-- 页面内容 -->
  </view>
</template>

<script setup lang="ts">
import { ref } from 'vue'
const isDark = ref(false)
</script>

也可监听系统主题:

ts
// 跟随系统主题
const mediaQuery = uni.getSystemInfoSync()
isDark.value = mediaQuery.theme === 'dark'

主要 CSS 变量参考

颜色

变量说明默认值
--lk-color-primary主品牌色#6965db
--lk-color-primary-light主色浅色背景rgba(105,101,219,.12)
--lk-color-success成功色#22c55e
--lk-color-warning警告色#f59e0b
--lk-color-danger危险色#ef4444
--lk-color-info信息色#64748b
--lk-text-primary主文本#1a1a2e
--lk-text-secondary次要文本#6b7280
--lk-bg-page页面背景#f8f8fc
--lk-bg-container卡片背景#ffffff

圆角

变量说明默认值
--lk-radius-sm小圆角8rpx
--lk-radius-base基础圆角12rpx
--lk-radius-lg大圆角20rpx
--lk-radius-xl超大圆角32rpx
--lk-radius-full全圆角9999rpx

间距

变量说明默认值
--lk-spacing-xs超小间距8rpx
--lk-spacing-sm小间距16rpx
--lk-spacing-base基础间距24rpx
--lk-spacing-lg大间距32rpx
--lk-spacing-xl超大间距48rpx

基于 MIT 协议开源 · 粤ICP备2022114240号-3