Как сделать автоматическую тёмную тему такой же, как выбранная тёмная тема?

У нас есть тёмная тема, которая выглядит так:

Когда мы выбираем эту тему в профиле пользователя, она отображается как на скриншоте выше, как и ожидалось.

Однако, когда она включается автоматически через опцию профиля «Включить автоматическую цветовую схему тёмного режима», она выглядит так:

При этом большая часть интерфейса становится тёмной, но при этом используется CSS светлой темы, из-за чего заголовок отображается следующим образом.

Есть ли способ заставить Discourse строго выбирать тёмную тему, включая CSS и прочее, когда она выбирается автоматически?


Для справки, вот наши опции светлой темы:

А вот опции тёмной темы:

Похоже, вы используете две разные цветовые палитры: Joplin Default и Simple Dark. Они отличаются друг от друга?

Да, тема по умолчанию с цветовой схемой Joplin по умолчанию — это светлая тема, а другая — тёмная. Думаю, нормально, что у них две разные цветовые схемы?

Приносим извинения! Это запутанный раздел в нашем интерфейсе администратора, и мы сейчас работаем над его улучшением. Надеюсь, я правильно всё объясняю, но позвольте мне описать текущий функционал своими словами.

Одно из изменений: мы начинаем говорить только о «цветовой палитре» и больше не используем термин «цветовая схема». Это скоро отразится в интерфейсе. На данный момент палитра и схема — это одно и то же.

Чтобы максимально эффективно использовать поддержку тёмного режима в Discourse, я рекомендую следующее:

  • Включить только одну тему;
  • В настройках включённой темы указать цветовую палитру для светлого режима;
  • В настройке сайта default dark mode color scheme id указать цветовую палитру для тёмного режима;
  • Учитывается системная настройка тёмного режима у участников;
  • Компонент темы «переключатель тёмного режима» работает для переключения между светлым и тёмным режимами;
  • Участники видят варианты светлого и тёмного режимов в своих настройках пользователя (и не видят выбор темы, так как включена только одна тема).

Если вы кастомизировали свою тёмную тему не только с помощью цветовой палитры и не хотите, чтобы пользователи использовали светлую тему с тёмными цветами, то переключатель тёмного режима использовать нельзя. В этом случае вам нужно:

  • Включить две темы;
  • Тема для светлого режима должна содержать светлые цвета;
  • Тема для тёмного режима должна содержать тёмные цвета;
  • Настройка default dark mode color scheme id не должна быть указана;
  • Системная настройка тёмного режима у участников НЕ будет учитываться;
  • Компонент темы «переключатель тёмного режима» не будет работать;
  • В настройках пользователя участники смогут выбрать предпочитаемую тему.

И наконец, если вам нужна только одна светлая или тёмная тема, просто включите одну тему и одну палитру, и не указывайте никакой палитры в настройке сайта default dark mode color scheme id.

Спасибо за ваш ответ. У нас на самом деле три разные темы, и две из них кастомизируются с помощью CSS (чтобы менять заголовок на Хэллоуин и Рождество). Если я правильно понимаю, с такой настройкой невозможно корректно реализовать автоматическую тёмную тему, верно?

Это не идеально, но я думаю, что смогу с этим жить. Возможно, нам нужно изменить заголовки так, чтобы заголовок в светлом режиме работал и в тёмном режиме.

Нет, если вы не предлагаете светлую и тёмную цветовые палитры. Да, если вы их предлагаете.

У меня есть несколько цветовых палитр, основные из которых — «Joplin Default» (используется в стандартной светлой теме) и «Simple Dark» (используется в стандартной тёмной теме).

Нужно ли мне что-то настроить здесь, чтобы исправить проблему, о которой я упомянул в первом посте?

Расскажите, какие цветовые палитры по умолчанию используются для светлой и тёмной тем в настройках форума. Установите светлую палитру по умолчанию в настройках тем. Начните использовать переключатель. Всё.

Трудности начинаются, когда пользователь меняет цветовую палитру в личных настройках. Это… ужасная система, слишком сложная, но при этом её трудно понять. По моему мнению, у нас слишком много вариантов отката при настройке цветов — они разбросаны повсюду. Палитры должны настраиваться только в темах. Конечно, это ограничивает возможность пользователя выбирать цвета, но…

Как вы настроили заголовок? Проблема в том, что ваша настройка заголовка зависит от выбранной темы, но переключатель тёмной/светлой темы меняет только цветовую палитру. Результат будет таким же, если вы выберете тёмную палитру в сочетании со светлой темой в своих настройках.

Versatile Banner использует разные фоновые изображения и цвета в зависимости от того, активна ли светлая или тёмная цветовая палитра. Вы можете сделать что-то подобное для своего заголовка.

Да, заголовок действительно устанавливается через пользовательские стили CSS каждой темы. Есть ли способ определить, что текущая цветовая палитра тёмная или светлая?

Я пробовал следующее:

@media (prefers-color-scheme: dark) {
  .d-header {
    background-image: url(https://imgur.com/LdcvIcp.png); /* Тёмное фоновое изображение */
  }
}

Но это не сработало, когда была активна тёмная цветовая палитра. На всякий случай я попробовал то же самое с @media (prefers-color-scheme: light), и это сработало. Получается, что тёмная цветовая палитра каким-то образом идентифицирует себя как светлая схема? Есть ли другой способ узнать, что сейчас активна тёмная палитра?

Я посмотрел HTML-код и поискал слово “dark”, но ничего полезного не нашёл. Я надеялся, что есть какой-то верхний селектор вроде .is-dark-theme, который мог бы это указать.

Работает ли способ изменения фона универсальным баннером? Вы можете установить компонент, добавить изображение фона для темного режима и протестировать это с помощью предварительного просмотра.

Затем вы можете использовать dark-light-choose, что, например, объясняется по ссылке Update themes and plugins to support automatic dark mode - #5 by pmusaraj, и этот метод также применяется для баннера.