prefers-color-scheme
(MDN)./* Настройки обычного состояния */
/* Они не нужны, если цвета наследуются от стиля Шикимори */
body {
background: #fff;
}
/* Вся магия тут */
@media (prefers-color-scheme: dark) {
body {
background: #121212;
}
}
Внутри медиа-запроса перечисляются правила с цветами для тёмной схемы. Если у пользователя будет включён тёмный режим, браузер будет использовать правила внутри медиа-запроса. Собственно на этом всё. Сейчас это лучший способ, если в вашем устройстве есть такая настройка. Он будет еще лучше и удобнее, если вы пользуетесь CSS-переменными.data-server_time
элемента body
. Код для московского времени может быть таким: /* Настройки обычного состояния */
body {
background: #fff;
}
/* Настройки тёмной темы */
body[data-server_time *= "T21"],
body[data-server_time *= "T22"],
body[data-server_time *= "T23"],
body[data-server_time *= "T00"],
body[data-server_time *= "T01"],
body[data-server_time *= "T02"],
body[data-server_time *= "T03"],
body[data-server_time *= "T04"],
body[data-server_time *= "T05"],
body[data-server_time *= "T06"],
body[data-server_time *= "T07"],
body[data-server_time *= "T08"] {
background: #121212;
}
Каждая строка группы селекторов отвечает за определённый час и в данном варианте охватывает 12 часов с 21:00 по 08:59. Поэтому, если настраивать что-то помимо элемента body
ваш код переполнят бесконечные строки правил. Единственным рабочим способом является использование CSS-переменных.body
, к изменениям которых у пользователя есть доступ. Возьмём, к примеру, настройку ширины экрана: допустим стандартная ширина — это наша светлая тема, а настройка в 1000 пикселей (добавляет к body
класс .x1000
) — это тёмная тема. Пожертвуем функциональностью и отключим изменения ширины: .x1000 .l-page {
max-width: 1200px;
}
Можно дополнительно изменить надпись самой настройки ширины: .control-label[for="user_preferences_body_width"] {
font-size: 0;
}
.control-label[for="user_preferences_body_width"]::after {
content: 'Выбор цветовой схемы (1200 — светлая; 1000 — тёмная):';
vertical-align: top;
font-size: 13px;
}
И теперь всё точно также как и в предыдущем варианте: /* Настройки обычного состояния */
body {
background: #fff;
}
/* Настройки тёмной темы */
body.x1000 {
background: #121212;
}
Обратите внимание, что гости профиля увидят тёмную тему, только если у них самих включена настройка ширины экрана 1000 пикселей. Настройка ширины экрана владельца профиля не учитывается при отображении профиля другим пользователям.
1920x695
711x717
@grin3671@Юрий Озеров@grin3671, ты мой спаситель, спасибо большое