B
← 返回文章列表
#前端

多主题博客:变量优先的设计笔记

2 分钟阅读系列 · 博客搭建 #3

多主题博客:变量优先的设计笔记

如何用一套 CSS 变量支撑八套主题,并让文章卡片、导航、按钮一起变色。

目标

用户切换主题时,不只是背景变一下,而是:

  • 导航、按钮、标签色
  • 文章卡片与封面
  • 阅读进度条、链接色

都跟着变,而且选择要记住

核心:data-theme + CSS 变量

<html data-theme="paper">
[data-theme="paper"] {
  --background: #fafafa;
  --card: #ffffff;
  --accent: #0d9488;
  /* ... */
}

组件里尽量写:

className="bg-[var(--card)] text-[var(--heading)] border-[var(--border)]"

而不是 bg-fuchsia-500 这类写死色。

封面为什么曾「不变」

静态 SVG 封面内部写死了 #0a0614、紫色光晕。
主题变量再正确,图片像素也不会改。

改法:列表封面用 主题色渐变组件PostCover),标题和标签叠在上面。

状态保存

localStorage.setItem("blog-theme", themeId);

首屏用内联脚本读取,避免闪一下错误主题。

可维护性

主题列表集中在 src/lib/themes.ts
id、中文名、深浅色标记、预览色点。
新增主题 = 加一条元数据 + 一段 CSS 变量,不必改每个组件。

小结

主题系统的关键不是「有多少套皮肤」,而是 变量是否贯穿 UI
卡片、封面、标签一旦漏网写死色,用户就会觉得「主题坏了」。

zemeng5208

zemeng5208

@zemeng5208

全栈开发者 · 终身学习者

喜欢用代码解决问题,也喜欢把踩坑与收获写下来。关注前端工程化、TypeScript 与可读性。

2 粉丝 · 6 仓库

相关文章

评论