如何?多風格選擇 樣式即時切換_經驗交流

來源:互聯網
上載者:User
我們在製作網站的時候,希望自己的網站是多風格的,使用者可以根據自己的喜好選擇不同的風格,這樣的風格可以是布局上的變化,也可以是色彩上的差異,也可能是針對不同的使用者群而特別定製的樣式。
  我們該如何?多風格選擇與樣式的即時切換呢?
  其實只是IE不支援這個功能,我們完全可以交給瀏覽器去完成,FireFox就支援這個功能。
  假設我們有兩套CSS,分別封閉在兩個不同的檔案中:a.CSS和b.CSS。然後在<head>和</head>之間加入如下兩行XHTML代碼:

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

  然後用你的Firefox開啟這個頁面,在功能表列中選擇:查看 -> 頁面風格,應該就可以看到“主題A”、“主題B”並可以即時進行選擇了。
  我們可以用的另外一種方法就是動態程式來完成,例如ASP、PHP、JSP等,這樣做的好處是直接、高效、相容性好、可以記憶使用者選擇。可以將使用者的選擇記入Cookies也可以直接寫入到資料庫中,當使用者再次訪問的時候,就直接調用上一次訪問所選擇的樣式。具體的製作我們這裡就不詳述了,可以關注我們的網站www.52css.com,我們將不週期性推出這方面的內容。
  現在我們該使用什麼方法呢?讓瀏覽器選擇的方法,主流瀏覽器IE並不支援;用程式指令碼來實現?當我的網頁是靜態,也沒有資料庫。
  我們只能選擇用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);

  上面的代碼就是實現多風格選擇、即時樣式切換的javascript指令碼,我們可以將上面的代碼另存新檔一個js檔案,在需要的頁面直接引用:

<script type="text/javascript" src="cssturn.js?7.1.34"></script>

  當然,你也可以直接將上面的代碼直接寫在頁面內部。
  我們的風格有三種,一種預設另外兩種其它風格。將這三個css檔案引入分頁檔中:

<link rel="stylesheet" type="text/CSS" href="css.css?7.1.34" /> <link rel="stylesheet" type="text/CSS" href="aaa.css?7.1.34" title="aaa" /> <link rel="stylesheet" type="text/CSS" href="bbb.css?7.1.34" title="bbb" />

  好了,我們現在就可以在頁面中,增加切換風格的連結了:

<a href="#" onclick="setActiveStyleSheet('',1); return false;">預設樣式-白色</a> <a href="#" onclick="setActiveStyleSheet('aaa',1); return false;">樣式一-藍色</a> <a href="#" onclick="setActiveStyleSheet('bbb',1); return false;">樣式二-橙色</a>

  現在我們就大功告成了,測試一下我們上面的成果,看看效果吧。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "<a rel="nofollow" href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" target="_blank">http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd</a>"> <html xmlns="<a rel="nofollow" href="http://www.w3.org/1999/xhtml" target="_blank">http://www.w3.org/1999/xhtml</a>"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>阿Q家園</title> <link rel="stylesheet"  type="text/CSS" href="<a rel="nofollow" href="http://www.52css.com/attachments/month_0701/r2007128164252.css?7.1.34" target="_blank">http://www.52css.com/attachments/month_0701/r2007128164252.css</a>"  /> <link rel="stylesheet" type="text/CSS" href="<a rel="nofollow" href="http://www.52css.com/attachments/month_0701/c2007128164223.css?7.1.34" target="_blank">http://www.52css.com/attachments/month_0701/c2007128164223.css</a>" title="aaa" /> <link rel="stylesheet" type="text/CSS" href="<a rel="nofollow" href="http://www.52css.com/attachments/month_0701/h2007128164239.css?7.1.34" target="_blank">http://www.52css.com/attachments/month_0701/h2007128164239.css</a>" 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="#" onclick="setActiveStyleSheet('',1); return false;">預設樣式-白色</a> <a href="#" onclick="setActiveStyleSheet('aaa',1); return false;">樣式一-藍色</a> <a href="#" onclick="setActiveStyleSheet('bbb',1); return false;">樣式二-橙色</a> <p></p> </body> </html>
  • 相關文章

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.