必须调用 bootstrap.Theme.getOrCreateInstance().update() 才能刷新 CSS 变量,仅设置 data-bs-theme 属性无效;需确保 theme.js 加载、CSS 完整、自定义样式使用 var(--bs-xxx)、避免闪屏及局部主题逃逸。
只改页面没反应,是因为 CSS 变量根本没重算——必须手动调用。
为什么切了
但页面颜色不变
不是代码写错了,而是变量没刷新或被覆盖。Bootstrap 5.3+ 的暗黑模式依赖两层:HTML 属性触发 + CSS 变量重计算。漏掉任意一环都会失效。
检查浏览器开发者工具的
节点:切换后
值是否变化?不变 → 没调
或
没加载
确认引入的是完整版 CSS(如
),CDN 上的
常精简掉深色变量规则
自定义 CSS 是否写在 Bootstrap 之后?如果写了
,它会直接覆盖
,必须改成
在 UMD 环境下默认不可用,需额外引入
如何正确初始化并避免闪屏
服务端或首次加载时,不能让 HTML 默认带
。JS 还没执行就渲染,用户会看到白字黑底、文字模糊甚至布局错位。
服务端/模板中固定输出
JS 加载后立即读取:
→ 有值则用;否则 fallback 到
设置完
后,
立刻
执行
别在
之前读
,否则可能返回
切换按钮的最小可行逻辑
图标按钮本身简单,但状态链必须闭环:点击 → 改属性 → 存 localStorage → 刷新变量 → 更新图标。缺一不可。
使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
下载
立即学习
“
前端免费学习笔记(深入)
”;
必须操作
,不是
—— 后者完全无效
示例事件监听:
图标状态要严格同步:当前是
就显示月亮,
就显示太阳。别只用
,应先读取
再决定加哪个类
存 localStorage 用字符串
/
,别用布尔值,为将来支持
预留语义空间
局部主题与组件逃逸问题
虽然可以在某个卡片上写
document.documentElement.setAttribute('data-bs-theme', 'dark')bootstrap.Theme.getOrCreateInstance().update()data-bs-theme:root--bs-body-bg.update()theme.jsbootstrap.cssbootstrap.min.css.card { background: #fff; }var(--bs-card-bg)background: var(--bs-card-bg);bootstrap.Themebootstrap/js/dist/theme.jsdata-bs-theme="dark"localStorage.getItem('theme')window.matchMedia('(prefers-color-scheme: dark)').matchesdocument.documentElement.dataset.bsTheme = 'dark'bootstrap.Theme.getOrCreateInstance(document.documentElement).update()DOMContentLoadedmatchMediaundefineddocument.documentElementdocument.bodydocument.getElementById('theme-toggle').addEventListener('click', () => {
const html = document.documentElement;
const current = html.getAttribute('data-bs-theme') || 'light';
const next = current === 'light' ? 'dark' : 'light';
html.setAttribute('data-bs-theme', next);
localStorage.setItem('theme', next);
bootstrap.Theme.getOrCreateInstance(html).update();
});darklightclassList.toggle()html.dataset.bsTheme'light''dark''auto'
实现局部暗色,但要注意组件挂载位置。
dropdown-menu
、
modal
、
toast
默认挂载到
document.body
,不受父级
data-bs-theme
影响,仍按根元素主题渲染
若需局部控制 navbar,不要混用
data-bs-theme="dark"
和
navbar-dark
类——二者逻辑冲突,推荐直接用语义类:
navbar-dark bg-dark
(深色)或
navbar-light bg-light
(浅色)
所有自定义组件背景/颜色必须用
var(--bs-xxx)
,硬编码颜色会导致主题切换后“卡死”在旧值
最常被忽略的是
.update()
调用时机和位置:它必须在 DOM 已挂载、
theme.js
已加载、且
data-bs-theme
属性已设好之后立刻执行——晚一帧都可能看到闪屏或样式残留。
相关文章
- 设计模式实战案例_观察者模式与发布订阅的区别
- Chart.js 极坐标图动态加载时的尺寸优化实践
- Next.js Image与Tailwind CSS实现高性能视差背景图教程
- 如何制作CSS下划线从中间向两端展开动画_利用scaleX与transform-origin
- HTML段落格式不对怎么办_HTML段落格式问题解答【解答】
- 使用vue如何实现的购物商城
- 支付宝小程序WebSocket使用方法 支付宝小程序WebSocket API教程【指南】
- 浅谈Node.js中的path模块和常用方法
- 这个表格样式是如何实现的?_html/css_WEB-ITnose
- v-for实现生成table并给table加上序号方法
