2026.07.12

一套代码,四个平行世界:多主题设计系统的工程化实践

换肤不是换一个背景色。这篇付费长文完整拆解「拾星集」的多主题架构:CSS 变量三层令牌体系、Tailwind v4 的运行时换装、按主题懒加载的 Three.js 场景、以及一次圆形扩散过场动画的全部实现细节——你现在就可以点右上角的调色盘亲手验证。

你现在看到的这个博客,右上角有一个调色盘按钮。点开它,选「樱落物语」——深空星云会在一个圆形涟漪里退场,晨光、和纸与花瓣雨接管整个页面:配色、玻璃质感、滚动条、列表符号、光标辉光、乃至身后的整个 3D 世界,全部一起换装。

再切到「霓虹残响」,雨丝和网格地平线亮起;切到「绯红警戒」,你会坐进一个机甲驾驶舱。

这不是四个网站。这是同一棵组件树、同一套业务代码,四份设计令牌与四个 3D 场景。本文是这套系统的完整工程拆解——不只是「怎么做」,更是每一个架构决策背后的「为什么」:

你将读到什么

  • 多主题系统的三层令牌架构:原始值 → 语义令牌 → 组件消费,边界怎么切才不会失控
  • Tailwind CSS v4 时代的换肤正解:为什么 data-theme + CSS 变量覆盖完胜 dark: 前缀和多份构建
  • 亮色主题是试金石:一个深色站点引入亮色主题时会暴露的七类硬编码陷阱
  • Three.js 场景怎么跟着主题走:React.lazy 按需加载 3D 世界,GL 上下文复用不重建
  • 圆形扩散换肤过场的完整实现:clip-path、GSAP timeline 与「动画中点换装」的时序设计
  • 防闪烁三件套:首帧内联脚本、meta theme-color、localStorage 的容错读写

全文约 6500 字,附可直接照抄的代码骨架。若你下一步是新场景默认节点材质或 WebGPU 后端,见《从 GLSL 到 WebGPU/TSL》——主题换皮与渲染后端是两条轴,别捆成一个 Epic。以下是完整内容——