Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Переключение таблиц стилей в js (https://javascript.ru/forum/misc/14380-pereklyuchenie-tablic-stilejj-v-js.html)

t1gor 13.01.2011 17:29

Переключение таблиц стилей в js
 
Здравствуйте, всем.

Делаю переключение таблиц стилей с целью смены цветовой гаммы на сайте. Сайт - www.sivash-terminal.com

Как-то оно все себя очень нестабильно ведет. Не нравиться. Думаю, что стоит подгружать фоном как-нить используемые картинки и стили.

Скриптов на сайте много, они работают при переключении с попеременным успехом. От чего зависит - непонятно.

В общем, хотелось бы услышать авторитетное мнение.

ЗЫ Под осла костыли не ставил пока, да и вообще на кросс-браузерность не проверял.

ksa 14.01.2011 10:50

Цитата:

Сообщение от t1gor
От чего зависит - непонятно

Оно всегда завист только от алгоритма тех изменений... "Само" ничего не делается... Если только у тебя это не искуственный интеллект. :)

x-yuri 14.01.2011 11:04

не надо отдельный css под каждый цвет. Назначаешь body класс red, green или blue, а в css пишешь стили в зависимости от текущего класса body

ksa 14.01.2011 13:13

x-yuri, в чем выигрыш?

x-yuri 14.01.2011 22:39

ну как, хотя бы: зачем javascript, если это намного проще делается с помощью css? Кроме того: зачем подгружать css при переключении, если можно его не подгружать?

и еще, используй css-спрайты

ksa 14.01.2011 22:49

x-yuri, все равно в цсс классы пишешь... В боди значение класа меняешь...
Я не про JS... Я про разные цсс файлы и про подмену имени цссного файла серверным скриптом.

Ведь при смене класса в боди (если управлять только этим) сами селекторы в одном цсс усложнятся...

Или я опять не понял твою идею? Можеш примерчиком проиллюстрировать?

x-yuri 14.01.2011 23:22

сами селекторы усложняются в ответ на усложнение условий задачи: появилась необходимость менять цвет сайта

кроме того, когда ты пишешь $('link[rel=stylesheet]').attr('href', '...') ты фактически говоришь браузеру: "то, как выглядела страница до сих пор... это все неправильно. Отмени все предыдущие стили, а новые возьми из другого файла". В моем случае, браузер корректирует только нужные моменты, а не весь css

давай пример, на всякий случай
<!DOCTYPE HTML>
<html>
  <head>   
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>
    <style type="text/css">
        body {
            font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
        }
        a {
          color: #36f;
        }
        ul {
          overflow: hidden;
          zoom: 1;
        }
        li {
            list-style-type: none;
            float: left;
            margin-right: 20px;
        }
        body.red p.first {
            background: #c33;
        }
        body.green p.first {
            background: #3c3;
        }
        body.blue p.first {
          background: #33c;
        }
    </style>
  </head>
  <body class="red">

<ul>
  <li><a class="red" href="#">красный</a>
  <li><a class="green" href="#">зеленый</a>
  <li><a class="blue" href="#">синий</a>
</ul>

<script type="text/javascript">
$('a').click(function(){
    document.body.className = this.className;
    return false;
});
</script>

<p class="first">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi non tortor nibh, in varius ipsum. Maecenas leo elit, tincidunt vel iaculis eu, eleifend nec libero. Praesent scelerisque, dolor ultricies pellentesque sodales, tortor leo tempor leo, tristique tincidunt velit augue ut nulla. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Cras rutrum mi vitae lacus pharetra egestas. Aenean dignissim nisi ac urna blandit interdum. In molestie mattis nulla et accumsan. Nunc posuere dapibus eros non tempus. Vestibulum quis mi turpis, ut fermentum metus. Proin eleifend congue eleifend. Proin consequat feugiat egestas. Nunc diam turpis, porta posuere sollicitudin id, volutpat vel augue.
<p class="second">Vestibulum dapibus nibh quis tellus convallis sed dapibus quam volutpat. Mauris tortor mauris, mattis vel sodales vitae, gravida sit amet nulla. Curabitur risus nulla, sagittis eget auctor eget, tincidunt vitae justo. Integer bibendum magna et elit pharetra congue. Nunc volutpat gravida massa, in laoreet leo aliquet ut. In nisl est, pellentesque sed tempus euismod, dictum non massa. Suspendisse interdum sodales nibh sit amet adipiscing. Aliquam quis est vitae sapien dignissim auctor vitae ac dolor. Maecenas venenatis commodo odio in suscipit. Quisque a libero nulla, accumsan tempus elit. Pellentesque quis odio ipsum. Nam vel purus id justo bibendum auctor et eu dui. Aenean sit amet metus id elit congue sollicitudin. Nullam dui quam, posuere dictum aliquam id, mollis ac odio. Sed sagittis, ipsum vulputate feugiat feugiat, nisi felis aliquam sapien, nec ullamcorper urna tellus non felis. Integer eu urna nec nulla commodo ultrices. Praesent non gravida enim.

  </body>
</html>

ksa 15.01.2011 11:48

Цитата:

Сообщение от x-yuri
сами селекторы усложняются в ответ на усложнение условий задачи

Просто есть сомнения что таким усложнением можно будет сделать невозможными или не понятными другим некоторые, и без того сложные, селекторы.
Разбивка на файлы (цветовые) будет вроде как проще... Т.е. у нас пока используется единый файл со структкрой/расстановкой элементов и несколько цветовых, типа паллитры. :D Т.о. меняются только паллировые цссы...
Пользователь имеет возможность делать свои паллитры и использовать их... При этом структура страницы неизменна.
А при едином файле такое вроде как сильно усложнится даже визуально...
Цитата:

Сообщение от x-yuri
огда ты пишешь $('link[rel=stylesheet]').attr('href', '...') ты фактически говоришь браузеру: "то, как выглядела страница до сих пор... это все неправильно.

А когда меняю значение класс у боди, чего "говорю" браузеру? :)

x-yuri 15.01.2011 14:16

Цитата:

Сообщение от ksa
Просто есть сомнения что таким усложнением можно будет сделать невозможными или не понятными другим некоторые, и без того сложные, селекторы.

при адекватной верстке не должно быть сложных селекторов и добавление еще одного элемента в селектор ничего не изменит. Можно делать отступ для правил, зависящих от цвета

Цитата:

Сообщение от ksa
Разбивка на файлы (цветовые) будет вроде как проще...

возможно, тем что стили, зависящие от цвета, не будут путаться под глазами, особенно если их много

Цитата:

Сообщение от ksa
Пользователь имеет возможность делать свои паллитры и использовать их...

ты про "внешних" пользователей? Это другой случай, такие правила лучше писать в отдельные файлы, да

кроме того, при замене css, браузер подгружает файл из сети. И будет заметно отключение стилей, по-крайней мере в первый раз. Проводя аналогию с картинками, эту проблему (в частности) решают css-спрайты

Цитата:

Сообщение от ksa
А когда меняю значение класс у боди, чего "говорю" браузеру?

ты видно тот сайт не внимательно смотрел, там всего 3 css-файла (а не хотя бы 4), под 3 цвета

таким образом, если палитр много, их можно поместить в отдельные файлы. Но в любом случае подключать все таблицы стилей, а правила писать в зависимости от класса body. Agree?

Цитата:

Сообщение от ksa
и без того сложные, селекторы.

а можно примеры?

ksa 15.01.2011 21:21

Цитата:

Сообщение от x-yuri
а можно примеры?

Я пока веду теоретическую беседу... :D

Но как вариант, частенько используются перечисляемые

#d1,
#d2,
#d3 {
...
}


Такие сочетания

#menu > li + li {
...
}


И вот ко всему этому нужно будет приписать класс боди и растиражировать в одном файле?

ksa 15.01.2011 21:28

Цитата:

Сообщение от x-yuri
ты видно тот сайт не внимательно смотрел, там всего 3 css-файла (а не хотя бы 4), под 3 цвета

Я про вообще и уже применительно "к себе"... У нас только базовых паллитр 6.

Цитата:

Сообщение от x-yuri
ты про "внешних" пользователей?

Схемка такая... В области около 40 базовых серверов так вот админ каждого базового сервера может сам или любой другой, по его выбору/доступу, пользователь делать паллитры. Задачка покажет при выборе их все. Базовые + все пользовательские...
Областной админ и сотоварищи могут разослать всем подчинённым свои паллитры...
На нашем форуме можно обменяться паллитрами с другими клиентскими областями...

Для нас это наверное "внешние" пользователи...

x-yuri 15.01.2011 23:06

не, ну если в этих палитрах только цвета и бэкграунды проставлены... вообще-то мне сложно судить, я с такими штуками практически не сталкивался, но не люблю, чтобы стили элемента были разбросаны по файлам. Хотя если эти стили пользовательские, то они и должны за них отвечать, так что вроде ничего так получается

Цитата:

Сообщение от ksa
И вот ко всему этому нужно будет приписать класс боди и растиражировать в одном файле?

почему ко всему? Исключительно к тем, которые меняются

а, так ты типа хочешь предоставить пользователям возможность писать css-правила? Так они ж туда порно-картинок чего-нибудь нехорошего как напишут. Или будут мастер-классы по css у тебя требовать. Сделай веб-интерфейс для задания оформления, чтобы пользователь мог без знания css, указать цвета. Храни настройки в БД и либо каждый раз пиши в страницу в виде css, либо кэшируй в css-файлах

Но если им этого мало, то пусть учат css. Только я слабо верю в возможность сильно изменить сайт с помощью css. Css zen garden, конечно, круто, но не для всех сайтов подойдет

ksa 16.01.2011 22:35

Цитата:

Сообщение от x-yuri
не, ну если в этих палитрах только цвета и бэкграунды проставлены...

Да, так и есть...
Цитата:

Сообщение от x-yuri
Исключительно к тем, которые меняются

Я это и имел ввиду... :)
Цитата:

Сообщение от x-yuri
я слабо верю в возможность сильно изменить сайт с помощью css

Я только его расскраску имел ввиду... Вроде как и ТС только про это писал. :)

Ну вроде как все перетёрли, т.ч. спасибо. :)

klaus_sv 16.07.2011 23:26

Очень всё интересно, но я что-то не понял.

Вот к примеру создал я отдельные таблицы стилей для каждой цветовой схемы, каким скриптом-то их подменять?

или...

Все стили в одном файле. Как вписать в body класс?

Возникла как раз такая потребность, так что это очень насущно.
Буду крайне признателен за подсказку

trikadin 16.07.2011 23:39

Ничего себе некропост...

Murmurianez 17.07.2011 09:50

Тему не читал - лень. Пример с jQuery: http://demo.russianpenguin.ru/webdev/css-theme_styling/.


Часовой пояс GMT +3, время: 15:23.