好的,我认为问题在于每个配色方案都没有选中“用户可以选择此…”或类似的选项。现在可以正常工作了。
我有一个似乎只影响 2 个类别的奇怪问题。
如果处于黑暗模式,刷新会显示“Might Site Logo”。将浅色模式切换回黑暗模式可以解决此问题。但刷新后会再次出现。
刷新后
现在更具体地说,似乎只有“Logos”主题。该类别中的其他主题似乎还可以。此类别中的其他主题不受影响。这是否与该主题上传了 2 个徽标有关?
修正,似乎在页面首次加载时也是如此。那么,这可能是 Discourse 的浏览器检测暗模式存在问题?
我似乎无法重现此问题。您能否详细说明您使用的步骤、浏览器和设备?
我们的用户报告称,在手动切换到深色模式后,一旦设备切换回浅色模式,论坛就会自动切换回浅色模式。
重现步骤:
- 将您的设备设置为浅色模式
- 在侧边栏中启用切换按钮
- 在您的设备上启用深色模式
- 在您的设备上禁用深色模式
→ discourse 实例切换到浅色模式。预期的行为是论坛会保持在深色模式,因为用户手动切换了。
基本上,如果能提供一个选项来在深色模式、浅色模式和自动切换开关之间进行选择,那就太好了。
我运行的是 Android 10,我想是在 LG G8X ThinQ 上,就是那个带双屏盒子的版本。
如果我切换应用程序,当我切换回来时,它似乎会短暂地加载浅色主题,然后切换到深色。类似于窗口皮肤。浅色徽标仍然显示(移动徽标)。
@jrgong 关于如何重现以及怀疑原因的解释也是我的。
浏览器处于浅色模式,并且切换器正在切换/强制进入深色模式。然后 Discourse 部分切换到浅色模式。
刷新时或在新标签页中打开链接时,我会短暂地看到相反的配色方案。不知何故,在发布新回复后,我也会看到类似的闪烁。
我启用了浅色主题,并且我的操作系统设置为深色模式。因此,当我切换回浅色时,我会看到差异。
我猜颜色是在客户端切换的,但用户设置似乎没有被触及?是否有可能在切换时更新用户的“配色方案”偏好设置以避免这种情况?客户端切换可以提供无缝过渡,而更改用户偏好设置可以避免刷新时短暂的相反配色方案闪烁?
@jordan.vidrine 我只是想再次提起这件事。 ![]()
它应该会显示在新页眉下拉菜单中。(那个是“侧边栏”但以下拉形式出现的东西)
@awesomerobot 和 @jrgong 只是同步一下。我们会关注此事 ![]()
不幸的是,它没有显示。但我现在知道原因了。
navigation_menu 设置为 Header-Drop-Down,但我看不到该选项。但是当我关闭 add_color_scheme_toggle_to_header 时,它出现在了下拉菜单中。所以它似乎只显示在一个位置。
谢谢!![]()
该组件能够选择“浅色”和“深色”配色方案,但它不会在浅色和深色模式之间切换,例如:不遵守 @media (prefers-color-scheme)。
一个主题组件,看起来像这样
CSS
@media (prefers-color-scheme: light) {
.darkonly { display: none; }
}
@media (prefers-color-scheme: dark) {
.lightonly { display: none; }
}
和 HEAD
<script type='text/x-handlebars' data-template-name='/connectors/above-site-header/darkdetector'>
<span class="darkonly">深色</span><span class="lightonly">浅色</span>
</script>
即使启用了深色“模式”,也会显示文本“浅色”(或者更准确地说:根据操作系统的深色模式显示“深色”或“浅色”,而与所选的配色方案无关)。
有什么解决方案吗?很多东西都依赖于这些媒体查询。
如果 discourse 类似于 Windows XP,请尝试将浏览器/操作系统设置为浅色模式,并将 discourse 设置为深色模式。在 Windows XP 中,配色方案始终覆盖在默认设置之上。
当存在多个用户可选的深色主题时,会出现两个下拉菜单并显示切换图标。

当只有一个用户可选的深色主题时,“深色”下拉菜单会消失,取而代之的是出现“自动深色模式”复选框。
当用户认为“嘿,我不想使用自动模式,我想使用切换”并取消选择“自动”复选框时,切换按钮会消失。
因此,要获得手动切换,您必须启用自动切换。![]()
因此,iPhone 上的刘海(notch)的颜色是通过注入到 HTML 标头中的 <meta name="theme-color" media="(prefers-color-scheme: ...)" content="#..."> 标签来获取的。这意味着,如果您的设备处于深色模式但切换器选择了浅色配色方案,或者设备处于浅色模式但切换器选择了深色配色方案,iPhone 刘海的颜色就会出错。
我认为这种行为是不期望的:
当前系统颜色设置为黑暗模式。我为浅色/深色主题使用黑/白徽标。
- 在实例上,我将主题设置为浅色。
- 访问主题页面。
- 最初,会加载正确的徽标,但是:
- 向下滚动然后向上滚动(标题应从完整徽标 > 主题标题 > 完整徽标切换)。
- 向上滚动时(例如,当主题标题再次变为完整徽标时),会显示错误的徽标(白色背景上的白色)。
我正在尝试在本地重现此问题,即使只有一个深色主题可供选择,我仍然看到下拉菜单,而不是自动模式。(在管理员设置中)
重现步骤:
-
立即从零开始安装一个空的 Discourse
-
在我的个人资料 → 界面中看到这个
-
删除 dracula、solarized dark 和 WCAG dark 颜色主题
-
返回个人资料
-
看到下拉菜单消失,“深色模式”标题和复选框出现
由 interface.hbs 中的 showDarkColorSchemeSelector 和 showDarkModeToggle 控制(interface.hbs)。另请参阅 interface.js 中的注释
@discourseComputed("userSelectableDarkColorSchemes")
showDarkColorSchemeSelector(darkSchemes) {
// 当设置了默认的深色主题时
// 下拉菜单有两个选项(禁用/使用站点默认)
// 但在这种情况下,我们显示一个复选框
const minToShow = this.defaultDarkSchemeId > 0 ? 2 : 1;
return darkSchemes && darkSchemes.length > minToShow;
},
感谢您如此详尽的回复。我之前只是“不允许”选择这些暗色主题,现在我会进行一些测试,将这些主题完全删除。
是的,这是一个您发现的好边缘情况。此切换仅在此场景下有效,前提是用户还启用了此 discourse-core 个人偏好设置。
我们将努力在此实例中也实现此功能。




