2010-04-27 100 views
2

我创建了一个网站,我想允许个性化的个人用户高达如改变字体,背景颜色一定程度上的问题等。这样做的问题是,我载入我的默认CSS文件已经默认一切的类。现在当我从我的数据库中获取背景颜色,那么如果有背景颜色的空值,那么应该加载默认的css类mystylesheet.css,如果值不为空,那么我想用我的默认CSS来覆盖它。这怎么可能?感谢提前:)初学者的关于CSS

+0

你在用什么来做抓取?可能有几十种不同的服务器端语言可以用于此目的,所以请编辑您的问题,因为PHP,C#和Java都是可以用于此目的的可能语言。其次,你的数据库使用什么语言来编程返回值? – 2010-04-27 17:33:42

+0

我按照你的说法编辑了 – TCM 2010-04-27 17:39:18

回答

3

负载的风格标签的默认stylesheat,并把你的动态之后的风格标签中的样式。

哪种样式时,不同的风格定位相同元素由特异性决定的,而如果选择是相同的,按顺序使用。使用最后找到的样式。

+0

+1:我打算说同样的事情,但服务器重置并失去了我的回应。 – Robusto 2010-04-27 17:49:35

1

编辑: Reason for CSS property precedence?

一种方法是从一个PHP脚本动态生成CSS文件。

你会包括像文件:

<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 
?> 
+0

我不想动态地包含一个css文件。由于只有某些类需要更改,而不是全部。假设在我的默认班级中有100个班级,我想让用户只更改其中的3个班级。在这种情况下,动态构建一个新的css文件是不现实的。我想知道哪个优先?一个外部的css文件,内嵌的css或者你在>中编写的文件,以及所有浏览器是否遵循相同的做法? – TCM 2010-04-27 17:42:04

+0

好的,用链接更新答案。 – zaf 2010-04-27 17:55:10

3

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; 
    } 
    } 
} 
+0

Gufa的方法的工作原理除了如果你想回到不同的主题,你需要重写css,以便它现在是最后的顺序 – 2010-04-27 17:46:31

+0

嗨Jaun, 我允许用户使用颜色选择器来选择背景颜色的页面。所以,我不认为这种方法也会起作用。作为这种静态方法,我们使用预先指定的颜色预先定义样式表。 你能告诉我哪个优先吗?外部css文件,内联css或? 直到现在我已经发现古法的方法是最适合我的要求。 – TCM 2010-04-27 17:51:09

+0

不,我觉得古法的方法即使在加载不同的主题时也可以工作。 – TCM 2010-04-27 17:54:23