📢 新文章推送 · 每周更新优质内容 · 订阅更新 →
向下滚动
测试笔记

硬编码颜色迁移为CSS变量

AI 智能总结

迁移背景

在主题开发的早期阶段,很多颜色值以硬编码形式散布在 CSS 各处:#fff#f1f5f9#e2e8f0#1a1a2e#333 等。随着暗色模式的引入,这些硬编码值成为主题切换的最大障碍——暗色模式下它们不会自动变化,导致出现亮色背景上白色文字消失、暗色区域与相邻元素格格不入等问题。

统一迁移到 CSS 自定义属性(CSS 变量),可以实现在一处修改变量值,全局生效,同时暗色模式只需覆盖变量定义即可自动适配。

颜色映射表

梳理所有硬编码颜色并根据用途映射到对应的 CSS 变量:

硬编码值用途替换为
#fff / #ffffff卡片背景var(--bg-card)
#f1f5f9浅灰背景 / 表格条纹var(--bg-secondary)
#e2e8f0边框色var(--border-color)
#cbd5e1较深边框var(--border-light)
#1a1a2e深色文字 / 标题var(--text-primary)
#333333正文文字var(--text-primary)
#64748b辅助文字 / 元信息var(--text-secondary)
#94a3b8占位符 / 禁用文字var(--text-muted)

关键选择器迁移

 1/* 迁移前 */
 2.related-card {
 3  background: #fff;
 4  border: 1px solid #e2e8f0;
 5}
 6
 7.related-card:hover {
 8  border-color: #cbd5e1;
 9  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
10}
11
12/* 迁移后 */
13.related-card {
14  background: var(--bg-card);
15  border: 1px solid var(--border-color);
16}
17
18.related-card:hover {
19  border-color: var(--border-light);
20  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
21}

阴影色 rgba(0, 0, 0, 0.08) 不需要替换——阴影在亮暗模式下均使用黑色,只是透明度不同,这已经通过暗色模式下的 box-shadow 微调来处理。

post-nav-item 组件

 1/* 迁移前 */
 2.post-nav-item {
 3  background: #f8fafc;
 4  border: 1px solid #e2e8f0;
 5  color: #333;
 6}
 7
 8/* 迁移后 */
 9.post-nav-item {
10  background: var(--bg-secondary);
11  border: 1px solid var(--border-color);
12  color: var(--text-primary);
13}

post-content details 折叠块

 1/* 迁移前 */
 2.post-content details {
 3  background: #f1f5f9;
 4  border: 1px solid #e2e8f0;
 5  border-radius: 8px;
 6}
 7
 8/* 迁移后 */
 9.post-content details {
10  background: var(--bg-secondary);
11  border: 1px solid var(--border-color);
12  border-radius: 8px;
13}

series-nav-item 系列导航

 1/* 迁移前 */
 2.series-nav-item {
 3  background: #f8fafc;
 4  border-left: 3px solid #e2e8f0;
 5}
 6
 7.series-nav-item.current {
 8  border-left-color: #3182ce;
 9  background: #eff6ff;
10}
11
12/* 迁移后 */
13.series-nav-item {
14  background: var(--bg-secondary);
15  border-left: 3px solid var(--border-color);
16}
17
18.series-nav-item.current {
19  border-left-color: var(--color-primary);
20  background: var(--bg-primary-hover);
21}

迁移成果

本次迁移覆盖了 main.csscustom.css 中的以下选择器:

选择器区域迁移点数
.related-card 相关推荐卡片8 处
.post-nav-item 上下篇导航6 处
.series-nav-item 系列导航5 处
.post-content details 折叠块4 处
.post-content blockquote 引用块3 处
.post-content table 表格7 处
.sidebar-widget 侧边栏组件9 处
合计42 处

后续维护

迁移完成后建议遵循以下规范:

  1. 新增样式一律使用 CSS 变量,禁止引入新的硬编码颜色
  2. 在 Stylelint 中配置 color-no-hex 规则(排除变量定义文件)
  3. 每新增一个颜色变量,同步在暗色模式 [data-theme="dark"] 块中定义其暗色值
  4. 定期审查 CSS 文件,发现遗漏的硬编码颜色及时迁移

CSS 变量不仅解决了暗色模式切换的问题,也让整个主题的颜色体系变得清晰可维护——从「散落在各处的魔法数字」变成了「有名称、有层级、有文档的语义化设计令牌」。

专题系列 Lumin Blog 优化
20 / 22
版权声明

本文作者 Lumin

本文链接 https://www.zhengquan.xyz/biji/css-variable-migration/

许可协议 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

请作者喝杯咖啡 ☕

  • 微信打赏
    微信支付
  • 支付宝打赏
    支付宝
点击按钮查看打赏二维码
🎁 推荐工具
试试这些实用在线工具,提升工作效率
前往工具集 →

留言评论

期待你的想法

评论加载中