Пропустить к содержимому
GraphiCore
Разработка Редакция GraphiCore

Тёмная тема без вспышки

Тема задаётся классом на корневом элементе до рендера — иначе пользователь видит белый экран.

Оранжевая пастельная абстракция из мягких окружностей

Светлый экран при выбранной тёмной теме — самая заметная ошибка при переключении оформления. Она возникает, когда тему применяют скриптом, который запускается после загрузки стилей.

Порядок загрузки

  1. Разметка документа.
  2. Небольшой встроенный скрипт в <head>: читает сохранённый выбор, ставит класс на <html>.
  3. Стили.

Первые два шага не требуют сетевых запросов, поэтому класс успевает примениться до первой отрисовки.

Источник правды — localStorage

Если пользователь выбрал тему вручную, системная настройка больше не участвует. Пока в хранилище ничего нет, берётся prefers-color-scheme.

Один переключатель — одно состояние

Когда кнопка темы выводится в двух местах (например, в хедере и в мобильном меню), обе копии читают одно значение и обновляются по событию. Иначе кнопки разъезжаются.

Проверка: включите тёмную тему, перезагрузите страницу и убедитесь, что белой вспышки нет.

  • доступность
  • фронтенд