You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在EJS环境中通过btn-night按钮切换stylesheet实现深色模式?

深色/夜间模式切换实现方案(适配EJS)

1. 给目标样式表添加唯一ID

先修改第14行的样式表标签,添加id属性让JS能精准定位元素:

<link id="theme-stylesheet" rel="stylesheet" href="/dist/css/skins/ralue-theme.min.css">

2. 编写核心切换逻辑

在页面中添加以下JavaScript代码(建议放在</body>标签前,或借助DOMContentLoaded确保DOM加载完成):

// 获取按钮和样式表元素
const themeToggleBtn = document.querySelector('.btn-night');
const themeSheet = document.getElementById('theme-stylesheet');

// 页面加载时恢复用户之前的主题偏好
document.addEventListener('DOMContentLoaded', () => {
  const savedTheme = localStorage.getItem('userTheme');
  if (savedTheme) {
    themeSheet.href = savedTheme;
    // 更新按钮显示文本(可选,提升体验)
    themeToggleBtn.textContent = savedTheme.includes('ralack') ? '切换浅色模式' : '切换深色模式';
  }
});

// 绑定按钮点击事件
themeToggleBtn.addEventListener('click', () => {
  // 判断当前主题状态
  const isLightTheme = themeSheet.href.includes('ralue-theme');
  // 切换对应的样式表路径
  const newThemePath = isLightTheme 
    ? '/dist/css/skins/ralack-theme.min.css' 
    : '/dist/css/skins/ralue-theme.min.css';

  // 更新样式表
  themeSheet.href = newThemePath;
  // 保存主题到本地存储,刷新页面后保持状态
  localStorage.setItem('userTheme', newThemePath);
  // 更新按钮文本
  themeToggleBtn.textContent = isLightTheme ? '切换浅色模式' : '切换深色模式';
});

3. (可选)优化按钮视觉反馈

添加CSS样式,让按钮在不同主题下有明显区分:

.btn-night {
  padding: 0.5rem 1rem;
  border: none;
  border-radius: 4px;
  cursor: pointer;
  transition: background-color 0.3s;
}

/* 浅色主题下的按钮样式 */
.btn-night {
  background-color: #2d3748;
  color: #fff;
}

/* 深色主题下的按钮样式 */
.btn-night.light-toggle {
  background-color: #fff;
  color: #2d3748;
  border: 1px solid #2d3748;
}

如果用上述CSS,记得在JS的切换逻辑里给按钮加/移除light-toggle类:

// 在点击事件中添加
themeToggleBtn.classList.toggle('light-toggle');
// 页面加载时初始化类状态
if (savedTheme) {
  themeToggleBtn.classList.toggle('light-toggle', savedTheme.includes('ralack'));
}

4. EJS相关注意事项

  • 确保JS代码在按钮和样式表标签渲染完成后执行,要么放在页面底部,要么依赖DOMContentLoaded事件(代码中已包含)。
  • 若使用EJS布局模板,可把主题切换的JS代码放在公共footer模板中,避免重复编写。

内容的提问来源于stack exchange,提问作者Rays

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 10:35:24