如何为深色(或浅色)模式添加特定的 body 类?

目前似乎没有特定的类。

我找到了这个,但它不起作用,因为暗模式和亮模式的主题 ID 相同(我想这是由配色方案定义的)。

我猜一个简短的脚本会有帮助?而且,也许可以将此添加到 Discourse 的核心中?

您介意解释一下为什么需要在 body 中添加特定的类来支持 darklight 模式吗?

这个核心功能不能满足您的需求吗?

论坛工作人员不喜欢一个特定的生成颜色变量(--tertiary-very-low),它会产生这种特定的棕褐色:

他们想调整它,但似乎我无法真正更改它,因为它是由系统生成的,并且没有针对暗模式的父级特定类。

不过,我偶然发现了这个信息:

我不知道它是否有效,我还没有机会尝试,因为现在有太多事情要做 :sweat_smile:。但如果它有效,那就可以了。事实上,这会更好。

2 个赞

我们(抱歉,我说我们是因为我和 @Canapin 一起在我们的论坛上进行调整)使用 Discourse 法语版中的预设“Café crème”(我猜是“咖啡”)制作了一个深色主题,并且我们刚刚将 :heart: 的颜色从棕色改成了红色。

这个主题奇怪的地方在于,超链接的颜色和文本几乎一样。
所以当它们是嵌入式链接时,你几乎看不到它们:


(是的,最后两个词“cliquez-ici”是一个网页链接……)

所以我们的想法是让它们稍微棕一点,这样它们就能脱颖而出。但是当我们调整颜色配置中的 quaternary 设置时,一大堆颜色也跟着改变了:DM 后面“气泡”的背景变成了更接近鸟粪的颜色,而不是 @Canapin 第一条消息中显示的棕色。顶部消息框(“已禁用外发邮件”框)也变成了同样的鸟粪颜色。

所以最初的想法是使用 css 来给超链接着色,但我们还没有弄清楚怎么做。

1 个赞

使用 .cooked a 作为 CSS 目标应该可以帮助您为这些链接设置自定义颜色。

虽然我们的核心系统现在允许为相应的模式使用深色/浅色方案选择,但您也可以像这样使用 CSS 媒体查询来处理深色/浅色模式:

1 个赞
@media (prefers-color-scheme: dark) {
    .cooked a, .d-editor-preview a {
        color: var(--primary-low-mid);
    }
}

工作完成了。谢谢!

哎呀。
不,它没起作用。

如果我错了,请纠正我。prefers-color-scheme 是基于设备的偏好,而不是实际选择的 Discourse 主题?

在我的 Windows 设备上,我设置了深色主题。因此,使用我设备偏好的网站将显示深色主题(如果可能)。

但是,在我的论坛上,我特意选择使用浅色主题,而不是深色主题。

尽管我使用的是浅色主题,但媒体查询 prefers-color-scheme 仍然被加载:

浅色主题,无深色模式,

尽管如此,深色主题的规则仍然被应用:

全屏:

1 个赞

抱歉,我误解了您的意思,以为您是指系统设置的暗黑模式,从而在论坛上触发暗黑模式。

所以您个人在使用浅色主题,但您的用户在使用暗黑模式?

之前的截图显示了暗黑模式的实际效果,但您最近的回复却说您在使用浅色主题。

您好,抱歉,这并不清楚,尤其是我在谈论两种相同类型但颜色方案不同的东西。另外,这让我有点困惑。

那么我的问题是:在 Discourse 中,我如何知道正在使用哪种颜色方案,而不管设备的深色/浅色模式偏好如何?

如果我理解正确的话:
如果我的设备(Windows 10)设置为深色模式,但我选择 Discourse 中的浅色方案,那么我的论坛 CSS 中的媒体查询 (prefers-color-scheme: dark) 仍然会返回某种“true”,并且我的嵌套规则将被应用,尽管我在我的论坛(即使 Windows 设置为深色模式)中选择了浅色方案。

所以:我如何在 Discourse 的 HTML 代码中知道我当前使用的是浅色还是深色方案?我没有找到像“light-color-scheme”或“dark-color-scheme”这样的父类。因此,我无法在 CSS 中区分/定位特定的颜色方案,也无法仅为其中一种或另一种创建规则。

1 个赞

明白了,我现在明白了。

我们不会根据用户当前选择的配色方案向 body 添加任何类。

如果我可以进一步探究一下,您是因为不喜欢我们颜色函数为您的当前深色方案生成的 --tertiary 的颜色吗?

您希望通过一个 body 类实现什么目标,而您觉得目前无法做到?

是的,正是如此 :slight_smile:

现在我读到这个问题……我不确定,因为据我所知,替换生成颜色的唯一方法是

:root {
  --primary-medium: #666666;
}

但是,作为一个根选择器,html 或 body 元素上的类无法在 :root 之前定位颜色方案。
所以……我不知道。

但简而言之,想法是为特定的颜色方案更改特定的生成颜色。 :person_shrugging:

如果不可能,也没关系。我们对我们的方案颜色进行了一些实验,目前对生成的颜色感到满意。 :slight_smile: 可以做得更好,但这远非一个大问题。 :slight_smile:

1 个赞

如果您愿意,有一种隐藏的解决方法。

您可以创建一个文件夹,并在其中仅添加一个 about.json 文件。

我实际上就是这样创建了一个 solarized light 颜色方案,因为我想指定我自己的变体,而不是依赖内置的颜色函数。

这是我制作的实际 about.json 文件。

然后,您将安装这个“主题”,它将把这个颜色方案安装到您的论坛上。届时,您就可以让它在其他主题上使用了。

{
  "name": "Solarized Light",
  "component": false,
  "license_url": null,
  "about_url": null,
  "authors": null,
  "theme_version": null,
  "minimum_discourse_version": null,
  "maximum_discourse_version": null,
  "assets": {
  },
  "color_schemes": {
    "Solarized Light": {
      "primary": "002B36",
      "primary-high": "4C6869",
      "primary-medium": "7E918C",
      "primary-low-mid": "A4AFA5",
      "primary-low": "D6D8C7",
      "primary-very-low": "F0ECD7",
      "secondary": "FCF6E1",
      "secondary-very-high": "E8E6D3",
      "secondary-high": "97A59D",
      "secondary-medium": "6C8280",
      "secondary-low": "325458",
      "tertiary": "0088cc",
      "tertiary-high": "329ED0",
      "tertiary-medium": "7EBFD7",
      "tertiary-low": "D6E6DE",
      "quaternary": "e45735",
      "header_background": "FCF6E1",
      "header_primary": "002B36",
      "highlight": "ffff4d",
      "highlight-high": "BCAA7F",
      "highlight-medium": "E3D0A3",
      "highlight-low": "FDF9AD",
      "danger": "e45735",
      "danger-low": "F8D9C2",
      "success": "009900",
      "success-medium": "4CB544",
      "success-low": "CFE5B9",
      "love": "fa6c8d",
      "love-low": "FCDDD2"
    }
  },
  "modifiers": {
  },
  "learn_more": "https://meta.discourse.org/t/beginners-guide-to-using-discourse-themes/91966"
}
2 个赞

我记得很久以前,在我更深入地研究我的 Discourse 安装时,我就看到过这个!

这绝对是一个很好的解决方法。谢谢。我会认为这是正确的解决方案,即使它可能被认为有点“hacky”。

1 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.