Как изменить тему с помощью SASS - PullRequest
1 голос
/ 02 августа 2020

У меня есть сайт, построенный на SASS. Есть определенные переменные, которые я хочу изменить при переключении между светлой и темной темами, но все переменные компилируются и преобразуются в исходное значение. Следовательно, я не знаю, как изменять переменные SASS при смене тем. . Я могу создать два отдельных файла css, но это будет избыточный код. Вы можете мне помочь?

Ответы [ 3 ]

1 голос
/ 02 августа 2020

В зависимости от вашего процесса сборки и требований для старых браузеров, например ie11.

Темы становятся проще с css настраиваемыми свойствами (css переменными). Основная идея c состоит в том, что у вас есть свои переменные, и при изменении темы вы меняете цвет переменных.

В моем самом основном c примере происходят следующие вещи и почему.

  1. На уровне root установите переменные для вашей темы по умолчанию.
  2. У вас есть класс с описанием темы, в моем примере это .dark-theme
  3. Установить class на теле, когда темная тема активна с js, или обратная передача в зависимости от вашего бэкэнда и желаемого подхода. В моем примере я делаю это с помощью js.

Здесь происходит то, что в .dark-theme мы меняем переменные на цвета темной темы. Это основы, и вы далеко уйдете.

Просто примечание, подход к сохранению темы зависит от того, какой у вас сайт SPA, Wordpress,. NET и т. Д. Я видел упоминания о сохранении его в базе данных и в пользователе, это не годится, если у вас нет подписи пользователя. Один из подходов - сохранить его в локальном хранилище браузеров и прочитать его при загрузке страницы.

const themeSwitcherButton = document.querySelector('.js-theme-switcher')

themeSwitcherButton.addEventListener('click', function() {
    const body = document.querySelector('body')
  
  if (body.classList.contains('dark-theme')) {
    body.classList.remove('dark-theme')
  } else {
    body.classList.add('dark-theme')
  }
})
:root {
  --primary-color: deepskyblue;
}

body.dark-theme {
  --primary-color: deeppink;
}


.block {
  margin-bottom: 3rem;
  padding: 2rem;
  background-color: var(--primary-color);
}
<body>
  <p class="block">
    Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima quos odio atque excepturi, aut voluptate. Similique autem, eos rem cum tenetur perspiciatis voluptatibus reprehenderit cumque, inventore, nam laudantium fugiat molestias eveniet sit commodi deleniti. Ipsa eum animi, excepturi tempore placeat.
  </p>
  
  <button class="js-theme-switcher">Theme switcher</button>
</body>
0 голосов
/ 02 августа 2020

Вам нужно использовать javascript, чтобы изменить тему и язык серверной части, сохраняя настройки пользователя. Например, вы можете использовать c#, java или javascript (node.js) для сохранения в базе данных. Как и при сохранении логина для пользователя, вам необходимо иметь значение, например, 0 - белый фон, а 1 - темный.

0 голосов
/ 02 августа 2020

используйте css переменные вместо sass one

--mainColor: #eaeaea;

и

color: var(--mainColor);

, чтобы использовать его

изменить:

для динамического изменения css переменных

var bodyStyles = document.body.style;
bodyStyles.setProperty('--mainColor', 'white');

если переменные были объявлены в элементе тела

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...