вопрос новичка о CSS - PullRequest
       3

вопрос новичка о CSS

2 голосов
/ 27 апреля 2010

Я создаю веб-сайт и хочу разрешить персонализацию отдельным пользователям, вплоть до изменения семейства шрифтов, цвета фона и т. Д. Проблема в том, что мой загружаемый по умолчанию CSS-файл уже содержит классы по умолчанию для всего. Теперь, когда я выбираю фоновый цвет из моей базы данных, тогда, если для цвета фона есть нулевое значение, тогда должен быть загружен класс по умолчанию для css файла mystylesheet.css, а если это значение не равно нулю, то я хочу переопределить его с помощью моего стандартного CSS. Как это возможно? Заранее спасибо:)

Ответы [ 3 ]

3 голосов
/ 27 апреля 2010

Загрузите формат стилей по умолчанию в тег стиля и после этого поместите ваши динамические стили в тег стиля.

Какой стиль использовать, когда разные стили предназначены для одного и того же элемента, определяется спецификой, а если селекторы одинаковы, - по порядку. Используется последний найденный стиль.

3 голосов
/ 27 апреля 2010

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

<body class="theme-1">
  <div class="main"><div>
</body>

Тогда каждая из ваших таблиц стилей должна содержать название темы в объявлениях:

- theme1.css

.theme-1 div.main {
  background-color: #eee
}

- theme2.css

.theme-2 div.main {
  background-color: #f30
}

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

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

Новый улучшенный ответ:

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

Например, используйте firebug и посмотрите на

http://www.extjs.com/deploy/dev/examples/themes/index.html

Найдите файл styleswitcher.js и посмотрите на функцию setActiveStyleSheet

function setActiveStyleSheet(title) {
  var i,
     a,
     links = document.getElementsByTagName("link"),
     len = links.length;

  for (i = 0; i < len; i++) {
    a = links[i];
    if (a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) {
      a.disabled = true;
      if (a.getAttribute("title") == title) a.disabled = false;
    }
  }
} 
1 голос
/ 27 апреля 2010

EDIT: Причина приоритета свойства CSS?

Один из способов - динамическое создание файла css из сценария php.

Вы бы включили файл как:

<link rel="stylesheet" type="text/css" href="css.php">

И файл css.php будет выглядеть примерно так:

<?php
header('Content-type: text/css');
// whatever you want to ouput depending on the user
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...