插件样式表必须使用CSS自定义属性来定义颜色

几天后,我将在核心代码中合并 此 PR,该 PR 将更改插件样式表的编译方式。此变更会影响插件样式表中使用的 SCSS 颜色变量。简而言之,这些变量需要替换为 CSS 自定义属性。大多数插件已经更新,在多数情况下,这只是一个简单的修改:只需将 SCSS 变量替换为 CSS 自定义属性:

-   background-color: $primary-low;
+   background-color: var(--primary-low);

更多示例以及如何处理更复杂的颜色转换,请参阅指南:https://meta.discourse.org/t/updating-themes-and-plugins-to-support-automatic-dark-mode/161595。(该指南足以帮助插件作者确保其样式能够正确运行。)


如果您想知道我们为何要进行此项更改,请继续阅读。

此前,核心和插件样式表是“按主题”进行编译的,以便在 SCSS 颜色变量被使用的地方包含该主题的颜色方案。这意味着拥有多个主题的网站(或多站点环境)需要花费很长时间进行预编译,因为它必须将核心和插件样式表的数量与活跃主题的数量相乘,以覆盖所有必要的组合。

自 2020 年 8 月起,为支持自动深色模式切换,我们添加了一个独立的颜色定义样式表,将颜色变量存储为 CSS 自定义属性。这一变更使我们能够即时切换颜色方案,但也将颜色从大多数样式表中抽象出来。得益于 CSS 自定义属性的魔力,我们现在可以在所有地方(核心、插件、主题)引用颜色,而无需在编译样式表时加载每个主题。

在过去几个月里,我们一直在将所有插件转换为使用 CSS 自定义属性。绝大多数 Discourse 插件现已更新完毕,但可能仍有少数插件仍使用 SCSS 变量定义颜色,这些插件需要进行更新。

10 个赞

感谢您的清晰解释,我大部分也能理解了!

这是否会导致在那些不遵循这些规则的主题组件网站上,升级和重建操作失败?就像之前因为其他原因导致 Failed to Bootstrap, due to discourse-alt-logo theme component 出现的情况一样吗?

如果是这样,是否有办法让错误信息更加清晰(以便那些无法理解构建日志的人也能看懂)?例如提示“在尝试升级之前请先移除某个插件”。或者,更好的是,当我们知道即将发生此类变更时,是否可以在管理面板上向用户发出警告?(也许已经有这样的机制,只是没人阅读)。

2 个赞

不,这不会导致重建失败。它只会导致未更新的插件颜色显示错误。这种情况通常只出现在自制插件中,我已经检查过此处(Meta)发布的大多数插件,并确保它们都是最新的。

你链接的问题与此更改无关,那是一个主题组件。目前,如果标记为自动更新的主题组件无法自动更新,我们会阻止重建。

4 个赞

啊,太好了。抱歉,我还在努力理解这些部分。

2 个赞

好的,我在深色模式下遇到了一个问题。我应该在哪里调整引用文本的颜色设置?

在公开分类中显示正常,但在私信气泡中无法阅读。

尝试了几次搜索,但未能找到正确的术语。

这也影响了话题链接。