在建站的時候,偶爾可能需要用到一個功能:切換網站顏色樣式,今天就介紹幾個通過JS方式切換網站顏色樣式的方法:
一、在我以前的印象里,頁面的字體屬性,背景,等樣式在頁面加載后基本上都是固定的了,但是今天看到可以通過js修改頁面的樣式,覺得有必要和大家分享下。
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>css ajax</title> <script type ="text/javascript" src ="test.js"> </script> <link href ="styles.css" type ="text/css" rel ="stylesheet"/> </head> <body > <table id ="table" > <tr> <th id ="tableHead"> Product Name </th> </tr> <tr> <td id ="tableFirstLine"> AirPlane </td> </tr> <tr> <td id ="tableSecondLine"> Big car </td> </tr> </table> <br/> <input type ="button" value ="set style 1" onclick ="setStyle1()"/> 觸發事件改變頁面的樣式 <input type ="button" value ="set style 2" onclick ="setStyle2()"/> 觸發事件改變頁面樣式 </body> </html>
現在頁面的文字樣式,背景,字體大小,都是系統默認的,待會兒,給大家演示下運行結果,可以比較下哦
JS文件:
function setStyle1(){ //將表的風格改為style1 //獲取html的引用 oTable = document.getElementById("table"); oTableHead = document.getElementById("tableHead"); oTableFirstLine =document.getElementById("tableFirstLine"); otableSecondLine = document.getElementById("tableSecondLine"); //設置風格 oTable.className ="Table1"; oTableHead.className ="TableHead1"; oTableFirstLine.className ="TableContent1"; oTableSecondLine.classNamee ="TableContent1"; } function setStyle2(){ //將表格的風格改為style2 //獲取html元素的引用 oTable = document.getElementById("table"); oTableHead = document.getElementById("tableHead"); oTableFirstLine =document.getElementById("tableFirstLine"); otableSecondLine = document.getElementById("tableSecondLine"); //設置風格 oTable.className ="Table2"; oTableHead.className ="TableHead2"; oTableFirstLine.className ="TableContent2"; oTableSecondLine.classNamee ="TableContent2"; }
CSS:
/* @CHARSET "GB18030"; */ .Table1 { border:DarkGreen 1px solid; background-color:LightGreen; } .TableHead1 { font-family:Verdana,Arial; font-weight:bold; font-size:10pt; } .TableContent1 { font-family:Verdana,Arial; font-size:10pt; } .Table2 { border:DarkBlue 1px solid; background-color:LightBlue; } .TableHead2 { font-family:Verdana,Arial; font-weight:bold; font-size:10pt; } .TableContent2 { font-family:Verdana,Arial; font-size:10pt; }
二、先說結論,總結成一句話就是 “加載對應的css,后加載的css覆蓋默認顯示樣式,即可達到換主題的目的”,具體的實現分為2步: 準備兩份不同主題的css 使用js實現切換(加載)css的方法
生成不同主題的css不同主題的css差異主要體現在顏色這個概念上,理論上只要有使用顏色的地方都需要進行適當的調整,比如文字顏色,背景色,邊框顏色等等。簡單來說就是白底陪黑字,黑底用白字,如果是采用了灰度色,則根據現實情況進行適度調整或無需調整。最簡單的調整顏色的方法是使用適當的工具來生成css,比如less,scss等。
具體請看文章:http://www.w2bc.com/article/209505
三、CSS樣式切換技巧 - 動態更換網頁色彩皮膚
樣式與數據分離所帶來的不只是符合標準這樣的簡單,樣式既然與數據分離那么樣式的切換則變得理所當然的了!但是網上這樣的中文教程實在是太少了!所以我收集了一部分中外網站已經實現的技術資料整理出來供網友參考。
首先要具備不同內容的CSS文件(最好每個文件代表一種樣式,或是代表需要作出變動的部分)。這里以三個為例:
第一個是背景為紅色的CSS文件(red.css)CSS中的內容為:
Copy code
Copy code
body {background-color:red;}
第二個是背景為綠色的CSS文件(green.css)CSS中的內容為:
Copy code
body {background-color:green;}
第三個是背景為黃色的CSS文件(yellow.css)CSS中的內容為:
Copy code
body {background-color:yellow;}
然后在xthml文件中加入這三個CSS的鏈接
Copy code
<link rel="alternate stylesheet" href=\'#\'" type="text/css" title="red" media="screen, projection"/>
<link rel="stylesheet" href="green.css" type="text/css" title="green" media="screen, projection"/>
<link rel="alternate stylesheet" href="yellow.css" type="text/css" title="yellow" media="screen, projection"/>
<link rel="stylesheet" href="green.css" type="text/css" title="green" media="screen, projection"/>
<link rel="alternate stylesheet" href="yellow.css" type="text/css" title="yellow" media="screen, projection"/>
這三個中除了title不一樣外還有一個地方有所不同,那就是REL。第一個與第三個都是alternate stylesheet只有第二個是stylesheet。這第二個就是當然樣式。
在鏈接下面再導入一個JS文件,用來控制這個樣式切換
Copy code
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;
}
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;
}
在合適的地方加入三個切換按鈕
Copy code
<a href=\'#\'" :void()" return false;" title="紅色樣式"></a>
<a href=\'#\'" :void()" return false;" title="綠色樣式"></a>
<a href=\'#\'" :void()" return false;" title="黃色樣式"></a>
<a href=\'#\'" :void()" return false;" title="沒有樣式"></a>
<a href=\'#\'" :void()" return false;" title="綠色樣式"></a>
<a href=\'#\'" :void()" return false;" title="黃色樣式"></a>
<a href=\'#\'" :void()" return false;" title="沒有樣式"></a>
好了發布試試點那三個切換鏈接!是不是已經切換了樣式?
補遺:帶有記憶功能的JS文檔
Copy code
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);
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);