# FLVX 主题开发指南 ## 概述 FLVX 主题系统允许你完全自定义前端的外观和行为。一个主题可以覆盖: | 覆盖层级 | 说明 | 难度 | |----------|------|------| | **CSS 变量** | 修改颜色、字体、圆角等设计 token | ⭐ 简单 | | **原始 CSS** | 注入自定义 CSS(动画、字体、阴影等) | ⭐⭐ 中等 | | **组件替换** | 替换任意 UI 组件(按钮、卡片、输入框等) | ⭐⭐⭐ 高级 | | **布局替换** | 替换整个页面布局结构 | ⭐⭐⭐ 高级 | | **页面替换** | 替换整个页面实现 | ⭐⭐⭐⭐ 专家 | ## 快速开始 ### 1. 创建主题文件夹 ``` src/themes/my-theme/ ├── index.ts ← 必须:主题入口,导出 ThemePackage ├── components/ ← 可选:组件覆盖 │ ├── index.ts │ └── button.tsx ├── layouts/ ← 可选:布局覆盖 │ └── admin.tsx ├── pages/ ← 可选:页面覆盖 │ └── login.tsx ├── assets/ ← 可选:图片、字体等资源 └── styles.css ← 可选:额外样式文件 ``` ### 2. 编写主题入口 `index.ts` ```typescript import type { ThemePackage } from "../types"; const myTheme: ThemePackage = { id: "my-theme", // 唯一标识(kebab-case) name: "我的主题", // 显示名称 author: "Your Name", // 作者 version: "1.0.0", // 版本号 description: "一个自定义主题", // CSS 变量覆盖 tokens: { light: { "--primary": "#ff6600", "--primary-foreground": "#ffffff", "--background": "#fafafa", }, dark: { "--primary": "#ff8833", "--background": "#1a1a2e", }, }, }; export default myTheme; ``` ### 3. 注册主题 打开 `src/themes/loader.ts`,添加两行: ```typescript import myTheme from "./my-theme"; registerTheme(myTheme); ``` 完成!主题已可用。 --- ## 详细指南 ### CSS 变量覆盖 所有可用的 CSS 变量定义在 `src/themes/types.ts` 的 `ThemeTokens` 接口中。常用的: ```typescript tokens: { light: { // 基础色 "--background": "#ffffff", // 页面背景 "--foreground": "#000000", // 文字颜色 "--border": "#e5e7eb", // 边框颜色 "--content1": "#ffffff", // 卡片背景 // 品牌色 "--primary": "#2563eb", // 主色 "--primary-foreground": "#fff", // 主色上的文字 "--secondary": "#6366f1", // 辅色 // 状态色 "--danger": "#dc2626", "--success": "#16a34a", "--warning": "#d97706", // 每种品牌色都有 50-900 共 10 级色阶 "--primary-50": "#eff6ff", // 最浅 "--primary-500": "#3b82f6", // 中间 "--primary-900": "#1e3a8a", // 最深 // 字体 "--font-sans": '"Inter", sans-serif', "--font-mono": '"Fira Code", monospace', // 圆角 "--radius": "0.5rem", }, dark: { // 暗色模式下的覆盖... }, } ``` > **提示**: 你不需要定义所有变量,只定义你想修改的,其余沿用默认值。 ### 原始 CSS 注入 `css` 字段可以注入任意 CSS。主题激活时会插入一个 `