Объедините медиа-запрос с обычным селектором css - PullRequest
1 голос
/ 21 июня 2020

Короткий вопрос

Можно ли сделать что-то вроде @media (prefers-color-scheme: dark), body.dark? Таким образом, появилась возможность комбинировать селекторы css с запросами css.

Более длинный вопрос с фоном

(Возможно, есть другое решение этой проблемы, о котором я не думал)

В настоящее время я разрабатываю веб-приложение с темной и светлой темами.

Я начал переключать его, используя @media (prefers-color-scheme: dark). Однако многие старые телефоны, к сожалению, не поддерживают это, поэтому я решил реализовать способ изменить это вручную. Поэтому я добавляю классы light или dark в тело в зависимости от пользовательских настроек.

В моем файле s css я хочу установить переменные в зависимости от .light или .dark, и если ни один из этих классов не установлен он должен зависеть от медиа-запроса со значением по умолчанию .light.

Мой текущий подход выглядит так:

// setting all the light-mode variables:
--header-color: white;

@media (prefers-color-scheme: dark) {
  body:not(.light) {
    --header-color: dark-grey;
  }
}

Хотя это достигает цели, если медиа-запрос установлен на затемнение иначе не сработает, так как в настоящее время вы не можете "принудительно включить" темный режим.

Конечно, я мог бы добавить еще один раздел ниже с body.dark{}, но тогда мне нужно было бы скопировать все переменные, которых довольно много .

Итак, мне было интересно, можно ли сделать что-то вроде @media (prefers-color-scheme: dark), body.dark.

Или, если есть какой-либо другой вариант, чтобы блок выбирал тело, если

  • он имеет класс светлый

или

  • , если предпочтительная цветовая схема не является темной, и
  • тело не имеет класса темный

и выбор другого блока тело, если

  • имеет класс dark

или

  • , если предпочтительная цветовая схема темная.

Но оба являются одним блоком, а не двумя, так что мне не нужно повторять каждую переменную дважды.

Спасибо вам большое.

...