Мы делаем нечто подобное в нашем веб-приложении.Пользователи могут выбирать между несколькими предопределенными макетами.
Существует статический файл CSS
, загружаемый обычным образом с общими стилями, общими для всех макетов.
Затем функция ниже получает строку CSS
сервером:
var setStyle = function (css){
//css has the format: selector{...style...}
var styleNode,
cur = document.getElementById('_theme');
cur && cur.parentNode.removeChild(cur);
styleNode = document.createElement('style');
styleNode.setAttribute('type', 'text/css');
styleNode.setAttribute('id', '_theme');
document.getElementsByTagName('head')[0].appendChild(styleNode);
if((/MSIE/).test(navigator.userAgent)){
styleNode.styleSheet.cssText = css;
}else{
styleNode.appendChild(document.createTextNode(css));
}
}
Функция добавляет тег STYLE
с идентификатором _theme
и вставляет в него определение CSS
.И макет применяется к странице.Если идентификатор _theme
уже существует, его заменяют.
Совсем недавно мы разработали мобильную версию нашего веб-приложения и радикально изменили методику.Стиль больше не определяется статическим CSS
, а из JSON
, который мы можем генерировать динамически, используя переменные, функции и т. Д. Прямо из браузера.
Мы сделали небольшую библиотеку JSкод доступен по адресу: http://github.com/pure/jstyle