valgerofficial
@valgerofficial
Десигнер LVL100

Как лучше сделать темную/светлую тему для сайта?

Привет друзья, у меня такой вопрос.. перед очередным проектом передо мной стал вопрос сделать темную тему для сайта. Искал множество решений в интернете, но так нечего и не нашел. Прошу вашей помощи.. необходимо сделать кнопку которая меняла бы файл стилей по клику к примеру
<link rel="stylesheet" href="light.css">
на
<link rel="stylesheet" href="dark.css">
А главное что бы скрипт сохранял изменения в localStorage. Что бы при перезагрузки страницы у пользователя сохранялась тема которую он выбрал. Подскажите пожалуйста.. увы знаний по js еще не набрался.. Спасибо!
  • Вопрос задан
  • 213 просмотров
Решения вопроса 2
@generate
...
Так можно изменить ссылку на стиль
<!DOCTYPE html>
<html>
<head>
	<title></title>

	<link rel="stylesheet" type="text/css" href="light.css" class="style">
</head>
<body>

<button id="color">Сменить цвет</button>

<script type="text/javascript">
	if (localStorage.getItem('style') == 'dark') {
		document.querySelector('.style').href="dark.css";
	}
	document.querySelector('#color').onclick = function (){
		if (document.querySelector('.style').getAttribute('href') === 'light.css') {
			document.querySelector('.style').href="dark.css";
			localStorage.setItem('style', 'dark');
		} else {
			document.querySelector('.style').href="light.css";
			localStorage.setItem('style', 'light');
		}
	}
</script>

</body>
</html>


Но лучше использовать селекторы чтобы менять стиль. И использовать один css файл

<style type="text/css">
	body {
		background: #fff;
		color: #000;
	}
	#color {
		color: #fff;
		background: #000;
	}
	.dark {
		background: #000;
		color: #fff;
	}
	.dark #color {
	color: #000;
	background: #fff;
	}

</style>



<button id="color">Сменить цвет</button>
<script type="text/javascript">
	if (localStorage.getItem('style') == 'dark') {
		document.body.classList.toggle('dark');
	}
	document.querySelector('#color').onclick = function (){
		document.body.classList.toggle('dark');
		if (document.body.getAttribute('class') == 'dark') {
			localStorage.setItem('style', 'dark');
		} else {
			localStorage.setItem('style', '');
		}
	}
</script>
Ответ написан
PiSaiK
@PiSaiK
IT куратор
Всё гораздо проще. Современные браузеры понимают вот такую прелесть


Дальше можно пойти вот так.
Как определить тему на устройстве?
Мы в проектах делаем вот так. Определяем тему, и записываем куки.
var toggleSwitch = $('[data-theme="toggle"]');
// Получение значения куки
    var currentTheme = Cookies.get('theme');

// Если значение undefined (т.е. пользователь первый раз на сайте или не выбрал явно тему)
if (typeof (currentTheme) === 'undefined') {
    // Проверяем тему ос, если она темная, то дописываем значение dark
    if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
        Cookies.set('theme', 'dark');
        // Присваиваем значение переменной - dark
        currentTheme = 'dark';
    }
}

if (currentTheme === 'dark') {
    $('html').attr('data-theme', currentTheme);
    toggleSwitch.attr('checked', 'checked');
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@DrWeyber
Лучше сделать цвета переменными, а потом просто меня цвета переменных, если используете препроцессор, посмотрите примеры в интернете
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы