Динамическое изменение меньшего количества переменных

Я хочу изменить меньше переменной на стороне клиента. Скажем, у меня меньше файла

@color1: #123456;
@color2: @color1 + #111111;

.title { color: @color1; }
.text { color: @color2; }

Я хочу, чтобы пользователь выбрал цвет, изменил значение @color1 и перекомпилировал css без перезагрузки страницы.

В основном я ищу функцию js, что-то вроде этого

less_again({color1: '#ff0000'}) 

person ahmetunal    schedule 19.10.2011    source источник


Ответы (3)


Создатель less.js добавил некоторые функции, которые должны позволить вам сделать что-то подобное. Прочтите комментарии и ответы здесь: Динамическая загрузка правил less.js

person Moin Zaman    schedule 19.10.2011

Марвин, прошлой ночью я написал функцию, которая делает именно то, что ты ищешь.

Я создал форк на Github; https://github.com/hbi99/less.js/commit/6508fe89a6210ae3cd8fffb8e998334644e7dcdc

Взгляните на это. Поскольку это недавнее дополнение, я хотел бы услышать ваши комментарии по поводу дополнения. Это решение идеально соответствует моим потребностям, и я думаю, что оно подойдет и вам.

Вот основной образец;

Образец МЕНЬШЕ:

@bgColor: black;
@textColor: yellow;
body {background: @bgColor; color: @textColor;}

Из JS:

less.modifyVars({
  '@bgColor': 'blue',
  '@textColor': 'red'
});
person Hakan Bilgin    schedule 05.01.2012
comment
Это выглядит очень круто, Хакан, с нетерпением жду возможности попробовать. Есть ли причина, по которой вы еще не отправили запрос на включение? Мне было бы интересно посмотреть, что Cloudhead говорит о подходе. - person studgeek; 29.02.2012
comment
Также см. этот пост, где я предлагаю, чтобы ваш патч мог создать действительные варианты использования less.js в производстве. stackoverflow.com/a/9491074/255961 - person studgeek; 29.02.2012
comment
Я думаю, что сначала его могут опробовать другие, возможно, улучшить, а затем отправить запрос на извлечение. Я скоро отправлю запрос на вытягивание. Спасибо за ваш отзыв :) - person Hakan Bilgin; 18.03.2012
comment
Хакан, нужна твоя помощь! не уверен, что я что-то упускаю здесь. Я пробовал это с бутстрапом, и он не работает. Что я сделал, так это создал кнопку и при нажатии этой кнопки вызвал метод ur, ожидая, что он изменит css страницы. Но вместо перезаписи css существующий css был удален. Вот ссылка jsbin, которую я создал [ссылка]jsbin.com/avaqox - person hellojava; 20.05.2012
comment
Пожалуйста, помогите мне, приятель. или любые указатели b4 я начинаю настраивать исходный код. - person hellojava; 20.05.2012
comment
Забыл упомянуть, я уже добавил вашу функцию в меньше js - person hellojava; 20.05.2012
comment
@hellojava: извините, я не видел ваших комментариев до сих пор. Я внимательно рассмотрю вашу проблему, как только смогу, и свяжусь с вами. - person Hakan Bilgin; 24.05.2012
comment
@hellojava - ваша страница настроена неправильно. Посмотрите на эту тестовую страницу: run73.com/test.htm - person Hakan Bilgin; 27.05.2012
comment
Большое спасибо Хакан. Я загляну на эту страницу. :) - person hellojava; 29.05.2012
comment
Похоже, modifyVars теперь включен в меньшее количество. Прекрасно работает! - person NotDan; 27.11.2014
comment
Да извини. Я не комментирую это здесь... оно было добавлено ~18 месяцев назад. - person Hakan Bilgin; 12.12.2014
comment
спс, мне помогло. - person atilkan; 22.07.2015
comment
Ссылка на modifyVars документы: lesscss.org/usage/#using -less-in-the-browser-modify-variables - person Panagiotis Panagi; 15.10.2015

Это меньше:

@color1: #123456;
@color2: @color1 + #111111;

.title { color: @color1; }
.text { color: @color2; }

компилируется в этот CSS, и это все, что знает браузер:

.title { color: #123456; }
.text { color: #234567; }

Итак, теперь вы фактически говорите, что хотите динамически измениться на это:

.title { color: #ff0000; }

Вы можете сделать это, обратившись к существующей таблице стилей с помощью JS и изменив правило для .title. Или вы можете определить альтернативное правило в исходном CSS:

.alternate.title { color: #ff0000; }

И найдите все объекты с .title и добавьте к ним .alternate. В jQuery это будет так же просто, как:

$(".title").addClass(".alternate");

В простом JS вам нужно будет использовать прокладку для предоставления getElementsByClassName в кросс-браузерном режиме, а затем использовать:

var list = document.getElementsByClassName("title");
for (var i = 0, len = list.length; i < len; i++) {
    list[i].className += " alternate";
}
person jfriend00    schedule 19.10.2011
comment
это бесполезно, потому что я использую разные версии @color1, такие как saturate(@color1, 10%); darken(@color1, 60%); fadeout(desaturate(@color1, 80%), 50%); и т. д., поэтому #ff0000 меняется на разные значения для каждого. - person ahmetunal; 19.10.2011
comment
Что ж, удачи. Если вы хотите изменить значение @color1, вам придется динамически перезагружать все ваши таблицы стилей CSS (после модификации), потому что @color1 никаким образом не известно браузеру, поскольку оно было удалено при компиляции less. - person jfriend00; 19.10.2011
comment
В основном это проблема, я ищу способ перекомпилировать меньше без перезагрузки с новым значением color1. Ветка, которую перенаправил Мойн, выглядит многообещающе, прямо сейчас я над ней работаю. Спасибо, в любом случае. - person ahmetunal; 19.10.2011