Приложение, реализующее несколько способов1 смены темы на простом примере.
- Установка значений CSS-свойств программно. Стили можно задать с помощью CSS-переменных. При смене темы происходит установка значений CSS-переменных программного в зависимости от темы
- Переключение класса (или другого селектора). Для селектора, в котором определенны стили для обычной (светлой темы) добавить класс, для которого эти стили будут переопределены в пользу темной темы. При смене темы добавлять / убирать этот класс. Часто в качестве селектора используют data- атрибут.
- Инвертирование цветов. Повторяет предыдущий способ, но вместо переопределения стилей можно инвертировать цвета с помощью свойства filter и функции invert().
- Подгрузка разных файлов2. Предаврительно заготовить два файла для разных тем, с разными стилями. При смене темы у тега link менять атрибут href на нужный путь к файлу.
Чтобы улучшить приложение и, например, сохранять текущую тему можно воспользоваться localStorage.
npm i
npm start