不好看不要紧,上面所有的颜色都可以变更的。到时候一旦CSDN实现了这种程度,大家可以随便配自己想要的颜色。

解决方案 »

  1.   

    不错,楼主好样的,这是个性化的趋势现在很多论坛,网站都提供相似功能呵,只是我对CSS跟JAVASCRIPT 了解不多,
    如果能提供源码来学习,就太好了
      

  2.   

    全部换过ME+IE6
    比上次好,没有出现报错。
    select在换的过程中在跳动。给原码?
      

  3.   

    一半欢喜一般优。
      全部的压缩包在http://smallfairy.51.net/CSDNX/CSDNX3.zip,但由于是测试版,里面写得很乱套不大规范。欢迎熟悉JavaScript的朋友将如下代码移植成JavaScript,因为如果实际要用在CSDN肯定不能是VBScript,它的兼容性不好。  另外,这个代码虽然在IE 6.0正常却导致IE 5.0的浏览器出现下拉单被隐蔽的故障(而第一个代码在IE 5.0下很好用,却在IE 6.0下导致浏览器非法操作!)。详细情况是:当样式需要下载产生延迟的时候,下拉单会发生闪动。随后的选择当中,下拉单会藏在左下边的帧后面,导致无法弹出的错觉。我这里只好用鼠标滚轮或者键盘的Up、Down键操作。
      尽管我可以在之后的测试网页里采取将选单挪到左边框架里用妥协的方法解决,但这个问题的确让我心里很来气的。  另外解释一下我为什么要这样写代码:
      (1)如果把所有的样式都加载到网页里,势必增加CSDN服务器的负担。CSDN服务器忙已经成为一个大问题,所以在设计当中我尽一切可能减轻CSDN的传输量。所以才会想出下面这个“用一个加一个”的办法。而且下面的函数是“傻瓜”函数,你可以不用考虑有多少个样式。我写的程序都优先考虑可扩展性。
      (2)CSDN是通过Cookie来记录样式的,其实我也想这样做。暂时在测试代码里没有实现。而实际用起来肯定要用Cookie,否则新窗口打开的网页无法“跟踪”样式。小仙妹是搞本地代码的,在服务器一头涉及ASP和CGI的知识还要多多请教诸位高手。
      (3)实际应用当中,我建议CSDN不要在网页里使用任何HTML属性指定网页的外观,而是全部用css。这样的话可以用css发挥丰富的想象力去改变版式和外观。如果把元素定死了,那就没法改了。这样也可以在一定程度上减少代码。缺点是在制作过程中过度抽象不直观,有点耗费制作者的脑力。  这仅仅是为了决定使用何种办法去修改网页样式的一个测试。后面还要做出第二个测试网页,是一个代码结构测试网页。在后面的测试页面里要测试的是结构问题和多个帧之间脚本的配合问题。关键代码如下:(含有详细的解释,希望可以帮助移植。)Function StyleLoadToWindow(pWindow,pURL)
      'StyleLoadToWindow函数
      '语法:[tWorking]=StyleLoadToWindow(pWindow,pURL)
      '功能:变更指定window对象的样式为指定URL表示的css文件。
      '参数:pWindow         要操作的window对象。
      '      pURL            样式文件的地址。
      '返回:tWorking        函数的动作指示。False为无使能、True为有使能。
      '说明:如果在styleSheets集合中找到对应URL的样式文件地址,则切换到该样式。如果没有则添加。  '将pWindow的document对象引用给变量tDocument。好象在JS是SET的作用类似var命令。
      Set tDocument=pWindow.document  '将tDocument的styleSheets引用给变量tStyles
      Set tStyles=tDocument.styleSheets
      tWorking=False  'idStyleUpData.title=tStyles.length  '历遍tStyles,目的在于检查tStyles引用的集合里是否已经包含了pURL对应的样式。For Each……结构是可以历遍一个集合中的全部元素。tStyle是tStyles的一个元素。  For Each tStyle in tStyles    '判断tStyle.href属性。另外还有一个更简便的写法我刚刚才发现(只要下面注释里的两句就可以,至于是不是有效我一会实验一下):
        'tStyle.disabled=tStyle.href=pURL
        'tWorking=tWorking Or tStyle.disabled    If tStyle.href=pURL Then        '如果有href属性等于pURL的则开启它,同时使标记变量tWorking为真。
            tStyle.disabled=False
            tWorking=true      Else        '反之则使这个元素为失效
            tStyle.disabled=True    End If
      Next  If Not tWorking Then    '如果tWorking标记为假则创建新的StyleSheet添加进去。
        Set tStyleNew=tDocument.createStyleSheet(pURL,0)    '并使这个样式为有效的。
        tStyleNew.disabled=False  End If  '函数返回tDocument.styleSheets(变动之后的)
      StyleLoadToWindow=Not tWorking
    End Function
      

  4.   

    简化后的代码,但这样未必使程序运行起来更快。Function StyleLoadToWindow(pWindow,pURL)
      'StyleLoadToWindow函数
      '语法:[tWorking]=StyleLoadToWindow(pWindow,pURL)
      '功能:变更指定window对象的样式为指定URL表示的css文件。
      '参数:pWindow         要操作的window对象。
      '      pURL            样式文件的地址。
      '返回:tWorking        函数的动作指示。False为无使能、True为有使能。
      '说明:如果在styleSheets集合中找到对应URL的样式文件地址,则切换到该样式。如果没有则添加。  '将pWindow的document引用给变量tDocument
      Set tDocument=pWindow.document  '将tDocument的styleSheets引用给变量tStyles
      Set tStyles=tDocument.styleSheets
      tWorking=False  'idStyleUpData.title=tStyles.length  '历遍tStyles,目的在于检查tStyles引用的集合里是否已经包含了pURL对应的样式。
      For Each tStyle in tStyles    '判断语句被改成逻辑运算。
        tStyle.disabled=Not (tStyle.href=pURL)
        tWorking=tWorking Or (Not tStyle.disabled)  Next  If Not tWorking Then    '如果tWorking标记为假则创建新的StyleSheet添加进去。
        Set tStyleNew=tDocument.createStyleSheet(pURL,0)    '并使这个样式为有效的。
        tStyleNew.disabled=False  End If  '函数返回tDocument.styleSheets(变动之后的)
      StyleLoadToWindow=Not tWorking
    End Function
      

  5.   

    to 小仙妹:你的代码可不可以写成javascript的,这是javascript论坛哦,看得我头晕没有细看,你是不是先把csdn的stylesheets都给disable了,然后再加入自
    己定义的stylesheet?如果是这样,那就太不好了,csdn的css不只是用来排版的,它的有些css绑定了程序的哦(如:htc)。如果被disable了,那么。。其实css支持,作者样式定义和读者样式定义,你要改变csdn的默认样式,完全可以这样,就好象:/***用读者样式去覆盖作者样式***/
    BODY { background: url(bar.gif) white;
    background-repeat: repeat-x ! important }
    对于引入自己的css文件,完全不要写那么复杂:var  tLink=pWindow.document.createElement("LINK");
    tLink.rel="stylesheet";
    tLink.type="text/css";
    tLink.href=pUrl;
    pWindow.document.body.insertAdjacentElement("beforeEnd",tLink);
      

  6.   

    呵呵..还有更简单的...<link rel="stylesheet" type="text/css" href="*.css" id=tcss>
    <button onclick=tcss.href='test.css'>
      

  7.   

    1、我的那句:Set tStyleNew=tDocument.createStyleSheet(pURL,0)相当于下面五行的全部功能:var  tLink=pWindow.document.createElement("LINK");
    tLink.rel="stylesheet";
    tLink.type="text/css";
    tLink.href=pUrl;
    pWindow.document.body.insertAdjacentElement("beforeEnd",tLink);用JavaScript写出来就是:var tStyleNew=tDocument.createStyleSheet(pURL,0);之前我也使用那中创建元素的办法,但是后来发现这个办法不仅代码长,而且不标准。2、如果原有的cssC非常重要不可更改的话,可以在StyleSheets集合里保留下来。这个可以通过在更新的时候检测某种标记来决定。3、我对JavaScript一窍不通,所以翻译成JS有困难。不过算法可以交给大家,有能移植的朋友欢迎你们帮忙。对象都是相同的,仅仅是语言的语法问题。上面的程序其实不长,只是因为写了很多注释的原因。写注释的目的就是考虑到VBS和JS有区别,为了方便大家理解这个程序。4、goldenlove(潇洒.net)的办法我也用过,在第一个测试网页里就是这样的。但是在IE 6.0浏览器上出现极其严重的非法操作问题。也因为这个原因我才会使用上面那个更复杂的办法。因为上述办法不会引起IE 6的非法操作,却能引起IE 5的下拉单隐蔽到左下的帧的下面的问题(好象弹不出来一样)。这个办法是危软的手册里推荐的,我本不想用,但是不得不用。<link rel="stylesheet" type="text/css" href="*.css" id=tcss>
    <button onclick=tcss.href='test.css'>请goldenlove(潇洒.net)去下载http://smallfairy.51.net/CSDNX/CSDNX2.zip就知道了。这个就是那个有问题的版本。 http://smallfairy.51.net/CSDNX/CSDNX3.zip是改进后的。也就是现在这个。
      

  8.   

    to 小仙妹:我下载看了你的代码,感觉还挺认真,挺专业的哦
    我这里没有ie6.0,不能帮你测试了
    不过我这里是ie5.5没有任何问题。另:
    为什么用frames呢?
    你是不是想把CSDN的论坛放在你的 frame里面啊,然后通过
    你的另一个frame来改变他们的样式?如果是这样,那么就停止这种尝试把,ie的安全机制不会允许你这样做的
      

  9.   

    这个我很清楚:跨帧不能越过不同的域。因为CSDN本身就是用Frames的,所以我也必须使用Frames,否则如何修改其他帧的样式呢?上面的“推”代码仅仅是其中一个组成部分,应用在用户主动修改的时候。而还有另一个“拉”代码存在于其他的网页当中。这种拉式代码根据其中一个帧(是决定样式的帧,我给它起的名字叫做“控制帧”)的样式去“取”样式。这样就实现了其他帧的页面即使刷新也能保持和当前的样式同步。否则只要用户一刷新就会丢掉现在的样式。总的来说需要四个部分实现:“推”进器、“拉”进器、还有一个“暂存器”(用Cookie实现)和“记忆体”(就是CSDN的ASP了)。“推”进器在用户主动修改样式的时候能立刻实现样式的变动。“拉”进器保持帧和其他帧的样式同步。也许它和Cookie比起来显得多余,它只对多帧下有意义。这是为了保持多帧的整体效果。当网页是单独打开的时候,就试图从Cookie里获得样式。Cookie保证窗口级的刷新下维持当前的样式。ASP的服务器端永久地记载用户最终确定下来的样式。我是搞本地代码的,所以我只能做出前两个。后两个部分如果CSDN觉得好用的话,就需要CSDN自己完成,或者建议诸位之中有热心的朋友也帮着弄弄。CSDN正是由于缺少了前两个部分才导致CSDN更改配色后要重新登陆,这也是我为什么要做这些代码的原因之一。另外,“皮肤”不一定是要从CSDN下载的,我打算设计一种措施可以从本地取得样式。这样能采用一些很漂亮却又占空间的皮肤却不会增加CSDN的负担。
      

  10.   

    总的来说,所有这些都对CSDN只是一个建议。它如果想真的用在CSDN还需要一定的时间。CSDN是我实际遇到的第一个XML做的网站,很是大开眼界。但现有的CSDN是一堆帧里套着一堆……实在很头疼的。我觉得CSDN作为一个开发者聚集的地方,就好比是一群建筑师的俱乐部。作为建筑专家们聚会的场所,虽不一定要规模宏大富丽堂皇,但至少应当是建筑中的代表作,足以成为典范。我是看了“建议和意见”里几位网友的号召,加上我最近给CSDN做皮肤遇到的实际问题才产生这个念头:在抱怨种种不好的同时是不是应该做点什么呢?