三模式切换

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

实现原理

通过 CSS 自定义属性和 data-theme 属性实现主题切换:

const ThemeManager = {
  setTheme(theme) {
    this.currentTheme = theme;
    localStorage.setItem('theme', theme);
    this.applyTheme(theme);
  },

  applyTheme(theme) {
    let themeToApply = theme;
    if (theme === 'system') {
      const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
      themeToApply = prefersDark ? 'dark' : 'light';
    }
    document.documentElement.setAttribute('data-theme', themeToApply);
  }
};

CSS 变量驱动

所有颜色值都通过 CSS 变量定义,切换主题只需改变变量的值:

:root { --c-bg-main: #F8F6FC; }
[data-theme="dark"] { --c-bg-main: #0C0B12; }

系统监听

当选择「系统跟随」模式时,主题会监听系统主题变化并自动切换:

watchSystemTheme() {
  window.matchMedia('(prefers-color-scheme: dark)')
    .addEventListener('change', () => {
      if (this.currentTheme === 'system') {
        this.applyTheme('system');
      }
    });
}

暗黑模式切换按钮带有缩放动画,交互反馈细腻生动。