Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.05.2022, 15:57
Аспирант
Отправить личное сообщение для vitalso78 Посмотреть профиль Найти все сообщения от vitalso78
 
Регистрация: 10.05.2022
Сообщений: 31

Замена стилей
Здравствуйте. Хочу реализовать переключатель со светлой темы на тёмную. Пытаюсь подключить стили вот таким способом

<a href="#" oncl ick="changeCSS('/dark.css', 0);">тёмный</a> | <a href="#" oncl ick="changeCSS('/template_styles.css', 0);">светлый</a>
 
 

function changeCSS(cssFile, cssLinkIndex) {
 
    var oldlink = document.getElementsByTagName("link").item(cssLinkIndex);
 
    var newlink = document.createElement("link");
    newlink.setAttribute("rel", "stylesheet");
    newlink.setAttribute("type", "text/css");
    newlink.setAttribute("href", cssFile);
 
    document.getElementsByTagName("head").item(0).replaceChild(newlink, oldlink);
}


Но к сожалению стили подключаются частично. Если же я прописываю стили напрямую в шаблоне <link rel="stylesheet" href="/dark.css"> в <head>, то стили ломают светлую тему и всё тогда нормально. Как мне подключить тёмную тему шаблона через кнопку ?
Ответить с цитированием
  #2 (permalink)  
Старый 10.05.2022, 15:59
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

vitalso78,
меняйте class body.
Ответить с цитированием
  #3 (permalink)  
Старый 10.05.2022, 16:01
Аспирант
Отправить личное сообщение для vitalso78 Посмотреть профиль Найти все сообщения от vitalso78
 
Регистрация: 10.05.2022
Сообщений: 31

А можно по подробней пожайлуста, с примером. А то я дуб дубом.
Ответить с цитированием
  #4 (permalink)  
Старый 10.05.2022, 16:08
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

vitalso78,
https://javascript.ru/forum/css-html...tml#post531438

https://javascript.ru/forum/misc/809...tml#post528629

https://javascript.ru/forum/dom-wind...tml#post498169
Ответить с цитированием
  #5 (permalink)  
Старый 10.05.2022, 16:28
Аспирант
Отправить личное сообщение для vitalso78 Посмотреть профиль Найти все сообщения от vitalso78
 
Регистрация: 10.05.2022
Сообщений: 31

Ну как бы понятно, но не совсем. В примере меняеться лишь один фон. А как сделлать ссылкой на файл css ? У меня css более 210777 строк. Вы предстовляете как будет выглядеть страница html ,?
Ответить с цитированием
  #6 (permalink)  
Старый 10.05.2022, 17:25
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

vitalso78,
при клике записывайте название файла в localStorage, перезагружайте страницу, и грузите то что записали.
Ответить с цитированием
  #7 (permalink)  
Старый 10.05.2022, 18:06
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,726

Можно так сделать:

/index.html
<!DOCTYPE html>
<html>
  <head>
    <title>Parcel Sandbox</title>
    <meta charset="UTF-8" />
    <link rel="stylesheet" href="/src/dark.css" id="theme-css-file" />
    <script src="/src/index.js"></script>
  </head>

  <body>
    <div>Switch theme:</div>
    <button type="button" data-set-theme-file="/src/light.css">Light</button>
    <button type="button" data-set-theme-file="/src/dark.css">Dark</button>
  </body>
</html>


/src/dark.css
body {
  background: #333;
  color: #fff;
}


/src/light.css
body {
  background: #eee;
  color: #333;
}


/src/index.js
window.addEventListener("click", function (e) {
  const selector = "[data-set-theme-file]";
  let target = e.target;
  if (
    !target ||
    !target.matches ||
    (!target.matches(selector) && !(target = target.closest(selector)))
  ) {
    return;
  }

  const newCssFilePath = target.getAttribute("data-set-theme-file");
  const styleElement = document.querySelector("#theme-css-file");
  if (!newCssFilePath || !styleElement) {
    return;
  }

  styleElement.href = newCssFilePath;
});
Ответить с цитированием
  #8 (permalink)  
Старый 11.05.2022, 09:32
Аспирант
Отправить личное сообщение для vitalso78 Посмотреть профиль Найти все сообщения от vitalso78
 
Регистрация: 10.05.2022
Сообщений: 31

Смотрите. Я нашол выход из положения. Но к сожалению при переключении стилей они не сохраняются - они сохроняются до перезагрузки страница, далее нужно опять нажимать кнопку. Как мне сделать, что дописать, что бы новые стили сохронялись после перезагрузки страницы, до нажатия кнопки в обратное состояние старых стилей ? Тоесть. Включил я тёмный цвет, походил по страницам сайта, и потом опять переключил на светлый.

window.onload = function() {
    document.getElementById('SuperButton').onclick = function()
    {
        if(document.body.className != 'new_class')
        {
            document.body.className = 'new_class';
        }
        else
        {
            document.body.className = '';
        }
    }
}


$(function(){
  $('.switch-btn').click(function (e, changeState) {
    if (changeState === undefined) {
      $(this).toggleClass('switch-on');
    }
    if ($(this).hasClass('switch-on')) {
      $(this).trigger('on.switch');
    } else {
      $(this).trigger('off.switch');
    }
  });
 
  $('.switch-btn').on('on.switch', function(){
    console.log('Кнопка переключена в состояние on');
  });
 
  $('.switch-btn').on('off.switch', function(){
    console.log('Кнопка переключена в состояние off');
  });
 
  $('.switch-btn').each(function(){
    $(this).triggerHandler('click', false);
  });
 
});
Ответить с цитированием
  #9 (permalink)  
Старый 11.05.2022, 09:57
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от vitalso78
Как мне сделать, что дописать, что бы новые стили сохронялись после перезагрузки страницы, до нажатия кнопки в обратное состояние старых стилей ?
Если у тебя на сайте есть некая регистрация, т.е. ты можешь как-то определить пользователя - можешь в некой БД на сервере запоминать какая тема была выбрана.
Если таковой регистрации нет - можно записать в localStorage, потом читать от туда и правильно устанавливать тему...
Ответить с цитированием
  #10 (permalink)  
Старый 11.05.2022, 10:00
Аспирант
Отправить личное сообщение для vitalso78 Посмотреть профиль Найти все сообщения от vitalso78
 
Регистрация: 10.05.2022
Сообщений: 31

У меня регистрация есть. Мне нужно и с регистрацией и без. Ну вот я дал коды.Что мне нужно изменить ?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
переименовать название стилей в SVG перед вставкой в другой SVG Герасим Events/DOM/Window 9 09.06.2018 09:16
Замена тегов Kost-iv Events/DOM/Window 4 01.11.2015 17:12
Шаблон сброса стандартных стилей Olegich (X)HTML/CSS 14 13.09.2013 18:47
Динамическое применение стилей к элементу и их отмена Amphiluke Events/DOM/Window 10 26.11.2012 22:33
Изменение путей к таблицам стилей и скриптам в скрипете галереи lightbox 2.04 Flashton Элементы интерфейса 1 01.02.2010 10:10