我們在製作網站的時候,希望自己的網站是多風格的,使用者可以根據自己的喜好選擇不同的風格,這樣的風格可以是佈局上的變化,也可以是色彩上的差異,也可能是針對不同的用戶群而特別客製化的樣式。
我們該如何實現多風格選擇與樣式的即時切換呢?
其實只是ie不支援這個功能,我們完全可以交給瀏覽器去完成,firefox就支援這個功能。
假設我們有兩套css,分別封閉在兩個不同的檔案中:a.css和b.css。然後在
<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打開這個頁面,在選單列中選擇:查看-phpcn就可以看到「主題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>