主题设置

选择强调色与基础色,保存后全站生效。

强调色
基础色
点击切换锁定状态
显示侧边栏
组件
隐藏侧边栏

主题组件

flux:x-theme 是 Flux Pro Max 提供的主题切换组件,允许用户在页面中选择强调色和基础色。点击“保存”后主题会全站立即生效,并将配置持久化存储到 localStorage。

该组件复用了 fluxui.dev/themes 的主题生成逻辑,支持 19 种强调色和 5 种基础色的组合,提供与官方主题构建器一致的体验。

核心特性

  • 全站即时生效:保存后通过注入全局 CSS 变量立即应用主题,无需刷新页面
  • 持久化存储:仅在点击“保存”时写入 localStorage,刷新后自动恢复已保存主题
  • 智能配对:支持“锁定基础色”模式,锁定时会根据强调色自动选择推荐配对;手动改基础色会自动解除锁定
  • 单文件内聚:所有 HTML + JS 代码集成在一个 Blade 组件中,无需额外引入资源
  • Flyout 交互:使用 Flux Modal 的 flyout 变体,提供流畅的侧边栏体验

基础用法

在任意页面中放置组件即可,通常放在导航栏或设置页面中:

主题设置

选择强调色与基础色,保存后全站生效。

强调色
基础色
点击切换锁定状态
<flux:x-theme />

自定义按钮样式

可以通过 props 自定义触发按钮的文本、图标、变体和尺寸:

主题设置

选择强调色与基础色,保存后全站生效。

强调色
基础色
点击切换锁定状态
主题设置

选择强调色与基础色,保存后全站生效。

强调色
基础色
点击切换锁定状态
{{-- 自定义按钮样式 --}}
<flux:x-theme 
    button-text="切换主题" 
    button-variant="primary" 
    button-icon="paint-brush"
    button-size="base"
/>

{{-- 简洁样式 --}}
<flux:x-theme 
    button-text="配色" 
    button-variant="ghost" 
    button-icon="sparkles"
/>

当你想把主题入口放在 flux:navmenu.item / flux:navbar.item 中时,不建议直接嵌套 <flux:x-theme />,因为组件内部会渲染按钮,容易造成 button 嵌套,导致样式异常。

推荐做法:隐藏组件触发按钮,仅渲染 modal,然后用导航项点击触发 modal-show 事件打开。

主题设置

选择强调色与基础色,保存后全站生效。

强调色
基础色
点击切换锁定状态
{{-- 导航里使用主题组件(推荐) --}}

{{-- 1) 导航项负责触发打开 --}}
<flux:navbar.item
    icon="swatch"
    x-data
    x-on:click.prevent="document.dispatchEvent(new CustomEvent('modal-show', { detail: { name: 'docs-nav-theme' } }))"
>主题</flux:navbar.item>

{{-- 2) x-theme 仅提供 modal(隐藏触发按钮) --}}
<flux:x-theme name="docs-nav-theme" :hide-trigger="true" />

自定义 Modal 名称

如果页面中有多个主题组件实例,可以通过 name 属性避免冲突:

主题设置

选择强调色与基础色,保存后全站生效。

强调色
基础色
点击切换锁定状态
主题设置

选择强调色与基础色,保存后全站生效。

强调色
基础色
点击切换锁定状态
<flux:x-theme name="header-theme" button-text="顶部主题" />
<flux:x-theme name="sidebar-theme" button-text="侧边主题" />

可用颜色

组件支持以下颜色选项:

强调色(19 种)

Base Red Orange Amber Yellow Lime Green Emerald Teal Cyan Sky Blue Indigo Violet Purple Fuchsia Pink Rose

基础色(5 种)

Slate Gray Zinc Neutral Stone

Props 参数

参数
类型
默认值
说明
name string flux-pro-max-theme Modal 的唯一标识,用于区分多个实例
hide-trigger boolean false 隐藏组件自带触发按钮,仅渲染主题设置弹框(modal)。常用于导航菜单中:先放置 <flux:x-theme name="..." :hide-trigger="true" />,再用 modal-show 事件从外部按钮打开,避免按钮嵌套导致样式异常。
button-text string 主题 触发按钮的文本
button-variant string subtle 按钮变体(primary, subtle, ghost 等)
button-icon string swatch 按钮图标名称(Heroicons)
button-size string sm 按钮尺寸(xs, sm, base)

工作原理

组件通过以下步骤实现全站主题切换:

  1. 页面加载:从 localStorage 读取已保存的主题配置(key: flux-pro-max.theme.v1
  2. 生成 CSS:根据配置生成对应的 CSS 变量(--color-accent, --color-accent-content, --color-accent-foreground
  3. 注入样式:创建或更新 <style id="flux-pro-max-theme-style"> 标签,注入到 <head>
  4. 用户交互:点击按钮打开 flyout modal,选择强调色/基础色;可通过“链接”图标锁定/解除基础色配对
  5. 预览:在弹框内的更改会即时预览,但不会立刻写入 localStorage
  6. 保存/回滚:点击“保存”会写入 localStorage 并提交;若通过右上角关闭、点击遮罩或“取消”退出,则回滚到 localStorage 中已保存的主题

注意事项

  • 组件使用 @once 指令确保脚本只执行一次,即使页面中有多个实例
  • 所有代码都内联在 Blade 组件中,无需额外引入 JS 文件
  • 主题配置存储在 localStorage,清除浏览器数据会重置为默认主题
  • 弹框内的更改是即时预览;只有点击“保存”才会写入 localStorage,关闭未保存会自动回滚
  • 基础色锁定时,会根据强调色自动选择推荐的配对基础色;手动选择基础色会自动解除锁定
  • 支持亮色/暗色模式,CSS 变量会根据 .dark 类自动切换
© 2025 FluxProMax™. All Rights Reserved.

备案号:皖ICP备13019729号-11

网站导航