白天和夜晚,不该是同一张脸

大多数博客主题的深色模式只是一个简单的色相反转。把白底换成黑底,黑字换成白字,完事。

但这种粗暴的转换忽略了色彩心理学的本质:人类在白天和夜晚对色彩的感知完全不同。

幻梦设计了两套独立的色彩系统,它们不是彼此的负片,而是两个独立的设计方案。

朦胧幻梦:日间的温度

浅色模式取名「朦胧幻梦」,灵感来自清晨透过薄雾的阳光。

调色思路

以暖桃色和杏色为基底,整体色调偏暖,营造舒适、温和的阅读氛围。

色阶用途色值参考
P9 (最浅)页面背景接近纯白,带极淡的暖粉
P5 (中间)卡片、容器柔和米白
P1 (最深)正文文字深棕而非纯黑

纯黑色 #000 在浅色背景上对比度过高,长时间阅读容易眼疲劳。幻梦用深棕色 #2E2825 替代纯黑,保留了足够的可读性,同时减少了对眼睛的攻击性。

卡片层次

/* 幻梦的卡片不是简单的白色方块 */
.card {
  background: var(--cbg2);          /* 半透明暖白 */
  backdrop-filter: blur(16px);      /* 毛玻璃模糊 */
  border: 1px solid var(--cbd);     /* 微妙的边界 */
  border-radius: var(--br2);        /* 柔和的圆角 */
}

叠加在带背景图的页面上,卡片的半透明效果让背景若隐若现,形成层叠的视觉深度。

夜色幻梦:深夜的温柔

深色模式取名「夜色幻梦」,灵感来自夏夜星空。

为什么不用纯黑?

纯黑 (#000) 的深色模式是设计中的常见错误。屏幕上的纯黑色块与发光像素形成强烈反差,导致文字"光晕"效应——白字周围出现模糊的光环。

幻梦的深色背景使用极深的暖棕色 #0E0A08,保留了一丝温度。它比纯黑看起来更舒适,就像纸质书的米黄页面比纯白更护眼。

卡片在暗处的表现

深色模式下,卡片从"明亮"变为"深邃",但保持通透感:

[data-theme="dark"] .card {
  background: var(--cbg2);          /* 半透明深色 */
  backdrop-filter: blur(16px);      /* 毛玻璃在暗处同样有效 */
}

毛玻璃效果在深色模式下展现出另一种美感——卡片像是用深色水晶雕刻而成,边缘透出微光。

三模式切换逻辑

幻梦支持三种模式:跟随系统、浅色、深色。

class ThemeManager {
  // 三模式循环: system → light → dark → system
  cycle(): void {
    const modes = ['system', 'light', 'dark'];
    const next = (modes.indexOf(this.mode) + 1) % 3;
    this.setMode(modes[next]);
  }

  // 跟随系统时,监听系统偏好变化
  watchSystem(): void {
    window.matchMedia('(prefers-color-scheme: dark)')
      .addEventListener('change', e => {
        if (this.mode === 'system') {
          this.apply(e.matches ? 'dark' : 'light');
        }
      });
  }
}

选择通过 localStorage 持久化,页面刷新不会丢失。

从色彩到粒子

两套色彩系统的差异不止于 CSS 变量。Canvas 粒子系统也根据当前主题自动切换:

  • 浅色模式:糖果色粒子(粉、紫、橙、黄混合),轻快活泼
  • 深色模式:星光粒子(白、暖白、橙色光谱三种)+ 绿色萤火虫 + 周期性流星

配色的一致性让整个体验从背景、卡片到粒子动画,都处在同一个审美体系中。


色彩是设计的第一语言。好的色彩系统让你说不出哪里好,但觉得一切都刚刚好。