导航

毅博客

分享本身就是件快乐的事,我因别人得到帮助而感到幸福

« Opera Hack过滤器标准的下拉菜单 »

CSS 样式切换

本作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。
请大家帮忙:行文措辞难免有错,请大家在阅读时发现错误通过评论方式告诉我。谢谢大家

样式与数据分离所带来的不只是符合标准这样的简单,样式既然与数据分离那么样式的切换则变得理所当然的了!但是网上这样的中文教程实在是太少了!所以我收集了一部分中外网站已经实现的技术资料整理出来供网友参考。

首先要具备不同内容的CSS文件(最好每个文件代表一种样式,或是代表需要作出变动的部分)。这里以三个为例:

第一个是背景为红色的CSS文件(red.css)CSS中的内容为:

body {background-color:red;}
第二个是背景为绿色的CSS文件(green.css)CSS中的内容为:
body {background-color:green;}
第三个是背景为黄色的CSS文件(yellow.css)CSS中的内容为:
body {background-color:yellow;}

然后在xthml文件中加入这三个CSS的链接

<link rel="alternate stylesheet" href="red.css" mce_href="red.css" type="text/css" 
title="red" media="screen, projection"/>

<link rel="stylesheet" href="green.css" mce_href="green.css" type="text/css"
title="green" media="screen, projection"/>

<link rel="alternate stylesheet" href="yellow.css" mce_href="yellow.css" type="text/css"
title="yellow" media="screen, projection"/>
这三个中除了title不一样外还有一个地方有所不同,那就是REL。第一个与第三个都是alternate stylesheet只有第二个是stylesheet。这第二个就是当然样式。

在链接下面再导入一个JS文件,用来控制这个样式切换

function setActiveStyleSheet(title) {

var i, a, main;

if (title) {

for(i=0; (a = document.getElementsByTagName('link')[i]); i++) {

if(a.getAttribute('rel').indexOf('style') != -1 && a.getAttribute('title')) {

a.disabled = true;

if(a.getAttribute('title') == title) a.disabled = false;

}

}

}

}

function getActiveStyleSheet() {

var i, a;

for(i=0; (a = document.getElementsByTagName('link')[i]); i++) {

if(a.getAttribute('rel').indexOf('style') != -1 &&
a.getAttribute('title') && !a.disabled) return a.getAttribute('title');

}

return null;

}

在合适的地方加入三个切换按钮

<a href="javascript :void()" onclick="setActiveStyleSheet('red'); 
return false;" title="红色样式"></a>

<a href="javascript :void()" onclick="setActiveStyleSheet('green');
return false;" title="绿色样式"></a>

<a href="javascript :void()" onclick="setActiveStyleSheet('yellow');
return false;" title="黄色样式"></a>

<a href="javascript :void()" onclick="setActiveStyleSheet('none');
return false;" title="没有样式"></a>

好了发布试试点那三个切换链接!是不是已经切换了样式?

补遗:带有记忆功能的JS文档

function setActiveStyleSheet(title) {

var i, a, main;

for(i=0; (a = document.getElementsByTagName

("link")[i]); i++) {

if(a.getAttribute("rel").indexOf("style")

!= -1 && a.getAttribute("title")) {

a.disabled = true;

if(a.getAttribute("title") == title)

a.disabled = false;

}

}

}

function getActiveStyleSheet() {

var i, a;

for(i=0; (a = document.getElementsByTagName

("link")[i]); i++) {

if(a.getAttribute("rel").indexOf("style")

!= -1 && a.getAttribute("title") && !a.disabled)

return a.getAttribute("title");

}

return null;

}

function getPreferredStyleSheet() {

var i, a;

for(i=0; (a = document.getElementsByTagName

("link")[i]); i++) {

if(a.getAttribute("rel").indexOf("style") != -1

&& a.getAttribute("rel").indexOf("alt") == -1

&& a.getAttribute("title")

) return a.getAttribute("title");

}

return null;

}

function createCookie(name,value,days) {

if (days) {

var date = new Date();

date.setTime(date.getTime()+(days*24*60*60*1000));

var expires = "; expires="+date.toGMTString();

}

else expires = "";

document.cookie = name+"="+value+expires+";

path=/";

}

function readCookie(name) {

var nameEQ = name + "=";

var ca = document.cookie.split(';');

for(var i=0;i < ca.length;i++) {

var c = ca[i];

while (c.charAt(0)==' ') c = c.substring(1,c.length);

if (c.indexOf(nameEQ) == 0) return

c.substring(nameEQ.length,c.length);

}

return null;

}

window.onload = function(e) {

var cookie = readCookie("style");

var title = cookie ? cookie :

getPreferredStyleSheet();

setActiveStyleSheet(title);

}

window.onunload = function(e) {

var title = getActiveStyleSheet();

createCookie("style", title, 365);

}

var cookie = readCookie("style");

var title = cookie ? cookie :

getPreferredStyleSheet();

setActiveStyleSheet(title);

Andy JOIN

作者 / 振之
网站 / 毅博客 http://andy.andymao.com/
电话 / (86)025 5890 9295

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-Blog .Theme from Google黑板报 By Washun

Copyright 2005-2007 Jonmax.com. All Rights Reserved.

Search

最新评论及回复

最近发表

资助者链接

  • 欢迎资助毅博客
    请直接发邮件给我,不要加我QQ
    maozhenzhi@gmail.com
    maozhenzhi@163.com