Meta theme-color 未遵循当前配色方案

您好,这两个主题中描述的问题:

在我这里仍然存在(正在测试托管 Discourse 的最新/试用版本)

@mk0r 我在这里的 Meta 上无法重现此问题。我在这里使用 Grey Amber 主题/配色方案,这不是 Meta 的默认主题:

并且 theme-color 元标签对我来说颜色是正确的:

<meta name="theme-color" content="#36393e">

#36393e 是 Grey Amber 方案的标题背景颜色。如果我在没有登录的情况下在隐身窗口中打开 Meta,theme-color 元标签将具有默认配色方案(浅色方案)的标题背景:

<meta name="theme-color" content="#ffffff">

您是否尝试过清除您网站的浏览器缓存/ Cookie?如果这没有帮助,您能否尝试重现此问题并在 Meta 上分享重现问题的步骤?

2 个赞

谢谢您的检查,我能够重现它——这与暗模式有关。

theme-color 与默认/浅色模式时保持相同,至少对我来说是这样,在 meta 和我的安装上都是如此。

我甚至尝试将此添加到 head

<meta name="theme-color" media="(prefers-color-scheme: dark)" content="black" />

它显示在源代码中,但没有起到任何作用,也许是因为第一个 meta 标签没有指定 prefers-color-scheme: light

对我来说,主要问题是明亮的狀態列与移动设备上的深色页面严重冲突,以及在下拉刷新时显示为亮白色。

刚注册来评论,因为我认为这和我遇到的问题一样。

在使用我认为你们称之为渐进式 Web 应用(在 Android 13 上,在 Chrome 上查看 Discourse 论坛时出现的安装应用选项,在本例中是 https://llllllll.co/)时,该应用正确反映了系统暗模式设置,但状态栏保持浅色模式。Chrome 上不存在此问题。请看下图:左边是应用,右边是 Chrome 浏览器。

2 个赞

可悲的是,这没有得到任何关注 :frowning: 我技术不够,写不了 pull request,但我感觉这应该是一个相当容易修复的问题?也许这看起来很挑剔,但出于美观和功能上的原因,我希望这个问题能得到修复 :folded_hands:t4:

我上周又看了一下这个问题,并按照以下步骤重现了这个 bug:

  1. 将您的操作系统配置为使用深色模式(在 Windows 11 中,这可以在“设置”->“个性化”->“颜色”->“选择你的模式”中完成)。

  2. 在您的 Discourse 偏好设置 中,为常规模式和深色模式选择不同的配色方案,然后重新加载页面。

  3. 现在您应该会看到您为深色模式选择的配色方案在 UI 中生效(符合预期),但 theme-color 元标签将包含您为浅色模式选择的配色方案的 header_background 颜色值,而实际上应该是深色模式的颜色。

这个问题修复起来有点棘手,因为在服务器端——所有元标签都在那里渲染——我们无法得知客户端/浏览器将使用浅色模式还是深色模式配色方案。我们只包含浅色和深色方案的颜色定义,然后客户端/浏览器会根据 prefers-color-scheme 媒体查询选择与用户偏好匹配的那个。

不过,看起来 theme-color 元标签 接受 media 属性,所以我们应该能够为深色方案包含另一个 theme-color 元标签,并将 media 设置为 (prefers-color-scheme: dark)。我这周会尝试完成这个。

5 个赞

我认为,如果第一个 meta 标签没有指定浅色或深色模式,而第二个 meta 标签指定了深色模式,那么深色模式仍将从第一个标签继承。因此,我认为必须同时为浅色和深色模式指定这两个标签。

2 个赞

是的,我认为我的更改将使浅色主题的 meta 标签具有 media="(prefers-color-scheme: light)",深色主题的 meta 标签具有 media="(prefers-color-scheme: dark)",浏览器应该能够选择与用户偏好匹配的那个。

3 个赞

FYI @mk0r 我两天前已在以下位置修复了此问题:

3 个赞

谢谢 :slightly_smiling_face: 看起来真的很棒,但不幸的是它对我不起作用。我认为 media="all" 会覆盖暗模式下的 media="(prefers-color-scheme: dark") 吗?

1 个赞

嗯,您能分享一下您是如何测试的以及您使用的是什么浏览器吗?

1 个赞

哦,是的,当然,抱歉我忘了。

我在以下设备上进行了尝试:

Android 12
Chrome 106.0.5249.126 PWA

MacOS 12.4
Chrome 105.0.5195.125 PWA

1 个赞

我在 GitHub 上查看了该修复,我认为这个问题可能与我上一条消息中描述的问题相同 Meta theme-color is not respecting current color scheme - #9 by mk0r

我可能超出了我的技术知识范围,但我在看这些代码行:

    it "renders theme-color meta for the light scheme with media=all and another one for the dark scheme with media=(prefers-color-scheme: dark)" do
       expect(helper.discourse_theme_color_meta_tags).to eq(<<~HTML)
         <meta name="theme-color" media="all" content="#abcdef">
         <meta name="theme-color" media="(prefers-color-scheme: dark)" content="#defabc">
       HTML

我相信即使在用户处于黑暗模式下,meta name="theme-color" media="all" 也会优先于 meta name="theme-color" media="(prefers-color-scheme: dark)"

请看这里:
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta/name/theme-color

https://web.dev/learn/design/theming/

我认为最终渲染的页面需要包含以下几行才能正常工作:

<meta name="color-scheme" content="light dark">
<meta name="theme-color" content="#ffffff" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#000000" media="(prefers-color-scheme: dark)">

其中十六进制值将被选定颜色方案的值替换。

如果安装/主题没有不同的黑暗模式颜色方案,那么这些值将保持不变。

我意识到这有点吹毛求疵,但它确实有区别,所以非常感谢这个修复。我认为另一种选择是,我们能够通过用户管理界面选择 all 或同时支持黑暗和光明模式的 theme-color。或者根本不设置 theme-color,这样设备就可以设置浏览器界面的颜色并尊重用户的黑暗/光明偏好。

希望这有帮助 :folded_hands:

2 个赞

FYI @Don@mk0r,现在应该真的修复了:

(不确定 Meta 上的 kaden-stytch 是谁,但无论你是谁,谢谢你! :meow_heart:

4 个赞

是的,谢谢你 :slightly_smiling_face: 现在完美了! :heart:

3 个赞

此主题在 2 天后自动关闭。不再允许回复。