我们在制作网站的时候,希望自己的网站是多风格的,用户可以根据自己的喜好选择不同的风格,这样的风格可以是布局上的变化,也可以是色彩上的差异,也可能是针对不同的用户群而非凡定制的样式。
  我们该如何实现多风格选择与样式的实时切换呢?

  其实只是IE不支持这个功能,我们完全可以交给浏览器去完成,FireFox就支持这个功能。
  假设我们有两套CSS,分别封闭在两个不同的文件中:a.CSS和b.CSS。然后在<head>和</head>之间加入如下两行XHTML代码:

示例代码  [www.mb5u.com]
<link rel="stylesheet" type="text/css" title="主题A" href="a.css" />
<link rel="alternate stylesheet" type="text/css" title="主题B" href="b.css" />

  然后用你的Firefox打开这个页面,在菜单栏中选择:查看 -> 页面风格,应该就可以看到“主题A”、“主题B”并可以实时进行选择了。

  我们可以用的另外一种方法就是动态程序来完成,例如ASP、PHP、JSP等,这样做的好处是直接、高效、兼容性好、可以记忆用户选择。可以将用户的选择记入Cookies也可以直接写入到数据库中,当用户再次访问的时候,就直接调用上一次访问所选择的样式。具体的制作我们这里就不详述了,可以关注我们的网站www.mb5u.com,我们将不定期的推出这方面的内容。

  现在我们该使用什么方法呢?让浏览器选择的方法,主流浏览器IE并不支持;用程序脚本来实现?当我的网页是静态的,也没有数据库。
  我们只能选择用javascript的办法来搞定它了。我们看下面的代码:

示例代码  [www.mb5u.com]
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 = "";
documents.cookie = name "=" value expires "; path=/";
}

function readCookie(name) {
var nameEQ = name "=";
var ca = documents.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);

  上面的代码就是实现多风格选择、实时样式切换的javascript脚本,我们可以将上面的代码另存为一个js文件,在需要的页面直接引用:

示例代码  [www.mb5u.com]
<script type="text/javascript" src="cssturn.js"></script>

  当然,你也可以直接将上面的代码直接写在页面内部。
  我们的风格有三种,一种默认另外两种其它风格。将这三个css文件引入页面文件中:

示例代码  [www.mb5u.com]
<link rel="stylesheet" type="text/CSS" href="css.css" />
<link rel="stylesheet" type="text/CSS" href="aaa.css" title="aaa" />
<link rel="stylesheet" type="text/CSS" href="bbb.css" title="bbb" />

  好了,我们现在就可以在页面中,增加切换风格的链接了:

示例代码  [www.mb5u.com]
<a href="#" οnclick="setActiveStyleSheet('',1); return false;">默认样式-白色</a>
<a href="#" οnclick="setActiveStyleSheet('aaa',1); return false;">样式一-蓝色</a>
<a href="#" οnclick="setActiveStyleSheet('bbb',1); return false;">样式二-橙色</a>

  现在我们就大功告成了,测试一下我们上面的成果,看看效果吧。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>www.mb5u.com</title>
<link rel="stylesheet"  type="text/CSS" href="attachments/month_0701/r2007128164252.css"  />
<link rel="stylesheet" type="text/CSS" href="attachments/month_0701/c2007128164223.css" title="aaa" />
<link rel="stylesheet" type="text/CSS" href="attachments/month_0701/h2007128164239.css" title="bbb" />
<script type="text/javascript">
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 = "";documents.cookie = name "=" value expires "; path=/";
}function readCookie(name) {var nameEQ = name   "=";var ca = documents.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);
</script>
</head>
<body>
<a href="#" _fcksavedurl="#" οnclick="setActiveStyleSheet('',1); return false;">默认样式-白色
<a href="#" _fcksavedurl="#" οnclick="setActiveStyleSheet('aaa',1); return false;">样式一-蓝色
<a href="#" _fcksavedurl="#" οnclick="setActiveStyleSheet('bbb',1); return false;">样式二-橙色
<div></div>
</body>
</html>

第二种

核心:<link href= "css/${动态的}/style.css"  ... ... />
关键就是你改变文件夹的名称,也就是css目录下面有a、b、c三种皮肤
a、b、c三种皮肤文件夹下面都有style.css样式和图片。
你只需要在:<link href= "css/a/style.css"  ... ... />就是a样式了,
同理:<link href= "css/b/style.css"  ... ... />就是b样式。
……
在web中你可以通过一个按钮或是下拉菜单,让用户设置皮肤。然后把换肤信息
保存在session、cookie、或是数据库中,建议保持在数据库中。

第三种

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>切换样式</title>
<script type="text/javascript" language="javascript">
function change_page_css(param_color)
{document.styleSheets[0].cssText="body{font-size:12px;background-color:"+param_color+";}";                        // 通过document对象的styleSheets属性访问到css对象然后进行修改即可。
}</script>
<style type='text/css'>
body{
font-size:24px;
background-color:yellow;
}</style>
</head><body>
改变一下
<input  type="button" οnclick="change_page_css(this.value)" value="blue"/><input  type="button" οnclick="change_page_css(this.value)" value="red"/>
</body>
</html>
============================================================================================关键代码:document.styleSheets[0].cssText="body{font-size:12px;background-color:"+param_color+";}";                        // 通过document对象的styleSheets属性访问到css对象然后进行修改即可。

第四种

两套CSS,分别封闭在两个不同的文件中:blue.css和green.css。

1.浏览器的页面风格设置

<head></head>之间加入如下两行XHTML代码:

          <link rel="stylesheet" type="text/css" title="主题A" href="a.css" />
          <link rel="alternate stylesheet" type="text/css" title="主题B" href="b.css" />

然后使用firefox打开这个页面,在菜单栏中选择:查看 -> 页面风格,就可以使用你的主题了。

2.Javascript方法

先在head中添加

<link type="text/css" id="pagestyle" rel="stylesheet" href="style/blue.css" />

再添加js函数,来改变样式表的地址,其中v为样式表的名称。

function chgStyle(v){

document.getElementsByTagName("link")["pagestyle"].href = "style/" + v + ".css";

}

假如通过Html的select来控制样式表的变化,则可以这样用:

<select οnchange="chgStyle(this.value)">

<option value="blue" selected>蓝色风格</option>

<option value="green">绿色风格</option>

</select>

3.服务端Cookie的方法

前两种方法的弊端显而易见,第一种只能适用firefox浏览器,IE不支持,第二种很难做到全站的CSS切换,只能局限在当前页面,并且不能记忆用户的选择。

最好的CSS切换器应该使用服务器端脚本(PHP、ASP、JSP等)来开发。这样做的好处是很明显的:直接、高效、兼容性好、可以记忆用户选择、甚至可以组合不同的CSS实现相当复杂的“皮肤”切换。

先在head中添加

<link type="text/css" id="pagestyle" rel="stylesheet" runat="server" />

要在服务端使用该样式表,需要在服务端声明:

protected System.Web.UI.HtmlControls.HtmlGenericControl pagestyle;

然后通过一个DropDownList来实现多个样式的切换。

private void DropDownList1_SelectedIndexChanged(object sender, System.EventArgs e)

{

string style = this.DropDownList1.SelectedValue;

Response.Cookies["pagestyle"].Value = style;   //Cookie保存该样式

Response.Cookies["pagestyle"].Expires = DateTime.Now.AddDays(3);

//设置cookie有效期,如果不设置则只在会话中创建,不保存该cookie。

this.pagestyle.Attributes.Add("href","style/" + style + ".css");//设置样式

}

并在页面的Page_Load中添加判断用户是否已设置了样式,如未设置,则使用默认。

if(!IsPostBack)

{

string style = string.Empty;

if(Request.Cookies["pagestyle"] != null)

{

style = Request.Cookies["pagestyle"].Value;

}

style = (style == string.Empty) ? "blue" : style;

this.DropDownList1.SelectedValue = style;

this.pagestyle.Attributes.Add("href","style/" + style + ".css");

}

在每个需要样式切换的页面都加上这个方法,则就可以实现全站切换,当然如果共用页面头,则实现更方便。

如何实现多风格选择样式实时切换?相关推荐

  1. 如何实现多风格选择 样式实时切换?

    如何实现多风格选择 样式实时切换? Author:DivCSS Data:2007-01-28 字体大小: 小 中 大       [RSS]订阅 | 上一篇 | 下一篇 我们在制作网站的时候,希望自 ...

  2. 编辑画面,element-ui的单选框组选中值以及画面选择样式无法切换,但是绑定的v-model值已发生变化

    今天碰到了一个特别奇葩的问题,使用element-ui的单选框组做选择,在新增的情况下,也就是form表单绑定的对象为空时,画面可以正常操作取出来的值也没有问题,但是在编辑的情况下,也就是form表单 ...

  3. 几行代码搞定Flash应用的多语言实时切换问题

    在<WPF/Silverlight的数据绑定设计的真糟糕>文中批评了WPF/SL的数据绑定机制,拿的是Flex的数据绑定与其对比.本文介绍应用Flex的数据绑定来解决一个实际问题--多语言 ...

  4. vue、Cascader 级联选择、Cascader 属性事件方法、vue Cascader 所有级联选择样式、vue Cascader 级联选择全部属性事件方法

    vue.Cascader 级联选择.Cascader 属性事件方法.vue Cascader 所有级联选择样式.vue Cascader 级联选择全部属性事件方法 Cascader 级联选择 何时使用 ...

  5. 分页标签精讲(仿百度雅虎淘宝共23种样式任意切换)-罗春龙-专题视频课程

    分页标签精讲(仿百度雅虎淘宝共23种样式任意切换)-217人已学习 课程介绍         仿百度雅虎淘宝实现分页标签,需要学者有一定的JSP基础,该视频深入讲解分页标签业务逻辑处理: 课程收益   ...

  6. node.js+室内装修风格选择系统 毕业设计-附源码211552

    node.js室内装修风格选择系统 摘  要 随着互联网技术的深入发展和成熟,"物联网时代"到来的呼声日益高涨,国家"十二五"规划中也明确将物联网作为战略性新兴 ...

  7. Python可视化中Matplotlib(3.线条的详细样式及线性、保存图片、plot的详细风格和样式)、背景色、点和线的详细设置

    1.修改线条的样式: linestyle.color.marker(标记) '''颜色 color:修改颜色,可以简写成c样式 linestyle='--' 修改线条的样式 可以简写成 ls标注 ma ...

  8. 网络视频监控如何入门?如何安装和配置、设备选择和实时监控?

    网络视频监控是一种先进的安全技术,它可以通过互联网连接到远程视频服务器,使用户可以随时随地监控所关注的地点.本文将介绍网络视频监控的基础入门知识,包括安装和配置.设备选择和实时监控等方面. 一.安装和 ...

  9. jQuery的属性与样式之增加样式、删除样式、切换样式

    开发工具与关键技术:Visual Studio ASP.NET MVC 作者:刘剑鸿 撰写时间:2019年06月14日 星期五 jQuery的属性与样式之增加样式.删除样式.切换样式 1 .addCl ...

最新文章

  1. 选购个人计算机小结,计算机实训小结精选 .doc
  2. linux怎么创建vi脚本,Vim 创建Python脚本时候自动补全解释器和编码方法
  3. web2.0网站的配色参考方案
  4. java拦截器(interceptor)
  5. [多线程] Thread
  6. oc 经常用到弹出view的方法
  7. UI学习笔记---EasyUI panel插件使用---03
  8. 《南溪的目标检测学习笔记》——目标检测模型的设计笔记
  9. matlab 计算指北角,最优化方法MATLAB4
  10. 使用 K3S 创建本地开发集群
  11. 蛋白质结构预测大赛top1方案分享
  12. 网吧游戏更新与保护解决方案
  13. HOOK SSDT 实现内核级的进程保护
  14. day06 Elasticsearch搜索引擎2
  15. java爱听音乐音乐播放器
  16. java信用卡卡号算法,java实现主要信息的加密解密(模拟信用卡号的保存)
  17. 无胁科技-TVD每日漏洞情报-2022-12-12
  18. 2018互联网月饼哪家强?阿里有情怀、腾讯最实在、咪咕最暖萌、联想最简单粗暴......
  19. PHP数据加密技术之一---CRYPT()加密
  20. MacBook pro 用什么vpn 好_扫地机器人真得好用么?云米互联网扫地机Pro测评!

热门文章

  1. 普通电脑安装服务器系统安装教程,普通电脑安装服务器系统
  2. web3j对于智能合约有两种方式
  3. Excel VBA通过ADO连接、操作SQL Server数据库的自定义函数
  4. CodeForces1046B Hyperspace Highways
  5. 城巴站小偷假扮摩的司机,慎防
  6. 【开源项目】SpringCloud 快速构建项目脚手架工程(持续更新)
  7. 立体旋转(滚动圆环)
  8. android实验二之体重标准计算器
  9. TL-WR842无线桥接(WDS)方法及案例
  10. sourceinsight4设置