首页 新闻 会员 周边 捐助

网站的主题皮肤是怎么弄的啊,能不能指点一下?

0
[已解决问题] 解决于 2012-03-13 20:35

网站的主题皮肤是怎么弄的啊,能不能指点一下?

我想的方案是定义几套CSS,然后根据用户的设置(保存在数据库)进行动态加载css,一般是这样做的吗,请指点!

tab_china的主页 tab_china | 初学一级 | 园豆:54
提问于:2012-03-13 10:43
< >
分享
最佳答案
1

1. 改变页面调用的CSS文件来换肤。

这一个,严格上来讲,不应该算作皮肤机制。虽然CSS非常强大,也能够通过它来任意改变页面元素布局,但它的HTML始终是不变的,所以局限性是非常大的。

优点:完全不影响性能,甚至可以完全不由服务端代码来管理它的变换,可以使用JS来切换皮肤(由此,在我们有一套完美皮肤机制的情况下,这种方法,可以完全不与此机制冲突,让用户在客户端作更多的个性化)。

缺点:如果作为核心皮肤机制的话,非常有局限性。

示例:如QQ.COM, 114LA.COM上面的一些可点击的小色块,就是改变调用的CSS文件来实现换肤。

2. 读取模板文件,替换标识符为要显示的内容与数据输出。

这一个方法的灵活性比较高,每套皮肤可以有自己的布局,有自己的个性。

实现:比如模板中有一个标识$Subject,程序代码会把它替换成文章标题,然后有一个标识块<!— Loop[ArticleList]--><h1>$Subject</h1><div>$Content< /div><!--/Loop-->,程序代码会把它替换成一个文章列表,最后输出处理完所有标识符的内容。

通常,我们会缓存读取到的模板内容,但字符串的替换始终不可避免,或者也会把替换过的内容也缓存起来,但这样子,就等于要缓存模板内容以及替换过的内容,占用了两份似乎挺重复内容的内存(为什么?不然总不该每次数据有改变的时候就去作IO操作读取操作读模板文件吧,这似乎比字符串替换性能更差)。

优点:模板灵活程度很高,可以随便改动页面布局。

3.使用ASP.NET的App_Themes。

这一个方法,应该是极差的一个方法,根本只是ASP.NET的一个小纂头,鸡肋,基本上不实用。

实现:比如,定制一个BUTTON的样式是这样子的,<asp:buttonrunat="server" BackColor="lightblue"ForeColor="black" />,类似这样的代码,存在于.skin文件中。然后它的换肤机制如下,<%@ Page Language="C#" Theme="default" %>。在App_Themes目录下,是各套皮肤的独立文件夹,各个文件夹包含皮肤的样式以及图片文件等等,也可以包含.skin文件。

优点:只有ASP.NET才有

缺点:包含了第一种方法的缺点,.skin的样式定制方式还要严重依赖使用ASP.NET服务端控件,同时也影响性能,灵活性也极低。

4.动态载入.ASCX文件(ASP.NET用户控件)|| 使用.master(母版)。

这个方法,应该也是很多使用ASP.NET的人使用的方法,有时候,它还会与第三种方法结合使用。如果对性能需求不是很严格的话,中小型项目可以使用。

实现:使用LoadControl()动态载入.ASCX文件或(与)指定页面的MasterPageFile(目标皮肤文件夹的)实现(通常.ascx与.master还会结合使用)。

优点:灵活性极高,每个皮肤有独立的布局,直接使用了.CS文件的变量与方法ETC…甚至每套皮肤还有自己独立的代码文件。

缺点:影响性能。有兴趣可以自己去反编译LoadControl方法。同时,在页面要使用<%%>这种代码块,有时候感觉也有点不雅。

5.Xml + xslt

传说xml取代html是趋势??不清楚,不了解。应该不可能。此种方法我没有深入了解过,不过大概实现应该是要这样子?每一个XML(输出数据)会有一个对应的XSL文件(控制样式)。如下:

xml文件:

<?xml version="1.0"encoding="ISO-8859-1" ?>
<breakfast_menu><food><name>Belgian Waffles</name><price>$5.95</price><description>two of our famous Belgian Waffles with plenty of real maplesyrup</description><calories>650</calories></food>
<food><name>Cakes</name><price>$1.95</price><description>sweet cakes</description><calories>2650</calories></food>
</breakfast_menu>

 

xsl文件:

<?xmlversion="1.0" encoding="ISO-8859-1" ?>
<html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"xmlns="http://www.w3.org/1999/xhtml"><body style="font-family:Arial,helvetica,sans-serif;font-size:12pt;background-color:#EEEEEE"><xsl:for-each select="breakfast_menu/food"><div style="background-color:teal;color:white;padding:4px"><span style="font-weight:bold;color:white"><xsl:value-of select="name"/></span><xsl:value-of select="price"/></div><divstyle="margin-left:20px;margin-bottom:1em;font-size:10pt"><xsl:value-of select="description"/><span style="font-style:italic"><xsl:value-of select="calories"/></span></div></xsl:for-each></body> www.601456.com </html> 

这样子做,有什么好处么,我没有体验到。

 

给你提供的意见,希望你能理解

闫小彪 | 菜鸟二级 |园豆:205 | 2012-03-13 11:50
其他回答(1)
0

网站一般都用不同的模板替换的。

悟行 | 园豆:12559 (专家六级) | 2012-03-13 10:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册