0Pricing
React Academy · Урок

Переменные CSS для переключения темы

Определяйте полную цветовую палитру с помощью пользовательских свойств CSS и переключайте темы, изменяя атрибут data

«Переменные CSS для переключения темы» — бесплатный урок React Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения React Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс React Academy содержит 4 уроков всего.

Определение цветовых токенов в :root

Пользовательские свойства CSS (переменные), определённые в :root, доступны во всей таблице стилей. Определите полную цветовую палитру один раз — фоны, цвета текста, поверхности и границы — и ссылайтесь на неё повсюду. Такой единый источник истины упрощает переключение темы.

Переопределения тёмной темы с помощью data-theme

Когда атрибут data-theme="dark" установлен на document.documentElement, селектор CSS вроде [data-theme='dark'] переопределяет корневые переменные тёмными значениями. Компоненты используют var(--color-bg) и автоматически получают новые значения без каких-либо изменений в коде.

Основные переменные для определения

Как минимум определите: --color-bg (фон страницы), --color-text (основной текст), --color-primary (цвет бренда), --color-surface (фон карточек и панелей) и --color-border (разделители). Согласованный набор токенов не позволяет случайным значениям цвета появляться в компонентах.

Применение переменных в стилях компонентов

В CSS компонентов ссылайтесь на переменные, например background: var(--color-bg) и color: var(--color-text). Можно также указать резервное значение: var(--color-bg, #ffffff). Браузер разрешает переменную во время отрисовки, поэтому один класс работает и для светлой, и для тёмной темы.

Плавный переход при переключении

Добавьте transition: background-color 200ms, color 200ms к селектору :root. Когда атрибут data-theme изменяется, все элементы, использующие переменные CSS, одновременно переходят к новым значениям. Это создаёт ощущение качественной анимации без кода анимации на JS.

Переменные CSS и встроенные стили под управлением JS

Управлять темой через переменные CSS лучше, чем задавать встроенные стили из JavaScript. Браузер самостоятельно пересчитывает все стили, для каждого дочернего компонента с темой не запускаются дополнительные повторные отрисовки React, а каскад CSS автоматически обрабатывает наследование. JS нужно лишь переключить один атрибут на корневом элементе.

Резервный вариант на уровне OS с prefers-color-scheme

Можно объединить переменные CSS с запросом @media (prefers-color-scheme: dark) в качестве резервного варианта только на CSS. Определите переопределения для тёмной темы внутри медиазапроса в дополнение к селектору data-theme или вместо него. Это гарантирует работу тёмного режима, даже если JavaScript ещё не выполнялся.

Объединение data-theme с резервным медиазапросом

Наиболее надёжный подход объединяет оба механизма: запрос @media задаёт системное значение по умолчанию, а атрибут data-theme позволяет переопределить его через JavaScript. Если атрибут присутствует, он имеет приоритет благодаря большей специфичности; если атрибута нет, применяется медиазапрос.

Изображения для тёмного режима

Для изображений, которые плохо выглядят на тёмном фоне, используйте элемент HTML picture с дочерним элементом source media="(prefers-color-scheme: dark)". Браузер автоматически выберет тёмный вариант. Для значков SVG в CSS можно использовать filter: invert(1) как быстрое приближение.

Переменные темы с ограниченной областью действия

Переменные CSS можно ограничить областью действия отдельного компонента, определив их на корневом элементе компонента, а не на :root. Это позволяет задавать тему для каждого компонента отдельно: например, боковая панель может иметь собственный токен фона, отличный от фона страницы, и при этом корректно переключаться вместе с глобальной темой.

Отладка переменных CSS в DevTools

Chrome DevTools показывает вычисленные значения переменных CSS на панели стилей. Нажмите ссылку на переменную, чтобы перейти к её определению. Так легко проверить, применяется ли к любому элементу правильный тёмный или светлый токен. Значения переменных также можно изменять прямо на панели.

Пользовательские свойства CSS для оформления тем

Какой селектор CSS используется для определения глобальных пользовательских свойств CSS, применяемых ко всему документу?

Итоги урока: переменные CSS для переключения темы

Пользовательские свойства CSS в :root обеспечивают централизованную систему токенов для тем. Переключайте темы мгновенно с помощью атрибута data-theme на элементе HTML. Добавляйте переходы CSS для плавной анимации, используйте медиазапрос prefers-color-scheme как резервный вариант только на CSS и избегайте переопределения стилей отдельных компонентов через JS.

Часто задаваемые вопросы

Урок «Переменные CSS для переключения темы» бесплатный?

Да — полный текст урока «Переменные CSS для переключения темы» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс React Academy, подпишись на CoddyKit PRO. Курс React Academy содержит 4 уроков всего.

Чему я научусь в уроке «Переменные CSS для переключения темы»?

Определяйте полную цветовую палитру с помощью пользовательских свойств CSS и переключайте темы, изменяя атрибут data Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать React Academy?

Предыдущий опыт не требуется. React Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Переменные CSS для переключения темы»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке React Academy?

Да. Каждый урок React Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Определение системной цветовой схемы
  2. Переменные CSS для переключения темы
  3. React Context для состояния темы
  4. Сохранение темы и предотвращение мерцания
← Назад к React Academy