首頁 web前端 css教學 即時切換網頁的CSS樣式實現

即時切換網頁的CSS樣式實現

Dec 15, 2016 pm 01:40 PM

即時切換CSS樣式
用W3C標準建造的網站,從理論上來說可以做到完全的表現與結構相分離。打個比方,就是可以在不動骨架(結構,XHMTL)和肌肉(行為,Javascript)的前提下,徹底換一身皮(表現,CSS)。

當然,換皮之前你需要先按W3C標準建造你的網站,並且為它準備兩套表現不一樣的CSS。 “換皮”實質上就是“換CSS”,我們要做的,只是用某種方法讓瀏覽器載入另一套CSS,重新渲染頁面。方法有很多種,我就介紹最常見的三種。

方法一:什麼也不乾

啊?什麼也不乾?嗯,這個……準確地說是:就乾那麼一丁點兒 (你還真以為有這麼好的事兒呀……)。

假設我們有兩套CSS,分別封閉在兩個不同的文件中:a.css和b.css。然後在

和之間加入如下兩行XHTML代碼:


然後用你的Firefox打開這個頁面,在菜單欄中選擇:查看-> 頁面風格,應該可以看到如下的“風景」:

 

就這麼簡單,現在你就可以用Firefox來「換皮」了。 IE? IE沒這個功能…MS就是這麼拽,W3C「明文推薦」:要求瀏覽器提供給使用者自己選擇樣式表的權力,可它就不這麼幹。幸運的是這件事也不是太難雜,咱就代勞一下吧。

[separator]

方法二:Javascript

在方法一的基礎上,可以用Javascript的DOM方法訪問link對象,再將不需要的CSS設為“禁用(disabled)”,剩下的CSS就會被瀏覽器用來渲染頁面。腳本如下,請注意其中的註解:


然後在適當的地方呼叫這個函數,以本頁為例,加上以下兩個按鈕:

  

使用Javascript的好處是方便、快速、簡單,缺點也是很明顯的:很難做到全站的CSS切換,只能侷限在目前頁上。為了記憶使用者的選擇,可行的方案就是採用cookie。可是就算使用cookie,也需要在何時載入CSS,使用者沒有Javasciprt支援怎麼辦等問題上多做好些文章。所以不如用下面的方法——

方法三:伺服器端腳本

毫無疑問,最好的CSS切換器應該使用伺服器端腳本(PHP、ASP、JSP等)來開發。這樣做的好處是很明顯的:直接、高效、相容性好、可以記憶使用者選擇、甚至可以組合不同的CSS實現相當複雜的「皮膚」切換。

我這裡就用PHP為例,用其他的語言也都大同小異,對一般的開發人員來說不會有任何困難。

基本想法是這樣:使用者選擇一種“皮膚”,把使用者的選擇記入cookie(記入資料庫也一樣,不過這樣系統開銷會大一些),使用者造訪網站上的任何一個頁面時,再從cookie(或資料庫)中讀出先前使用者的選擇,載入對應的CSS檔案(這裡還是以方法一中講到的a.css和b.css為例)。

建立一個名為switcher.php的文件,內容如下:

 

這段腳本先讀取query數據,然後把參數style的值記入cookie ,最後返回上一頁。接下來我們就可以創建兩個用於切換樣式的連結了,並且放在合適的頁面上,例如首頁或用戶管理後台(注意把其中的site.com換成你的網域):

主題A
主題B  

點擊任一個鏈接,相應的就會把「a」或「b」記入cookie,然後就需要一段腳本來讀取這個cookie值並且輸出XHTML來引入對應的CSS:


 title="當前選擇的主題" href=".css" />

每一個需要切換樣式的頁面都要加上這段程式碼,所以直接把它加入網站的頭檔中就行了。當然你可以根據自己的需求修改這個腳本,但萬變不離其宗,總的思路應該是不變的。

  //預定義變數
  var i, links;

  //用DOM方法獲得所有的link元素
  links = document.getElementsByTagName("link");
  
  for(i=0; links[i]; i++) {

    //判斷此link元素的rel屬性中是否有style關鍵字
    //即此link元素是否為樣式表link
    //同時判斷此link元素是否含有title屬性
    if(links[i].getAttribute("rel").indexOf("style" ) != -1
  && links[i].getAttribute("title")) {

      //先不管三七二十一把它設為disabled
   再判斷它的title中是否有我們指定的關鍵字

      if(links[i].getAttribute("title").indexOf(title) != -1)


    i].disabled = false;

    }

  }
}


 

 title="主題A" href="a.css" />

 title="主題B" href="b.css" />

以上就是即時切換網頁的CSS樣式實現的內容,更多相關文章請關注PHP中文網(www.php.cn)!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
如何使用HTML,CSS和JavaScript創建動畫倒計時計時器 如何使用HTML,CSS和JavaScript創建動畫倒計時計時器 Apr 11, 2025 am 11:29 AM

您是否曾經在項目上需要一個倒計時計時器?對於這樣的東西,可以自然訪問插件,但實際上更多

HTML數據屬性指南 HTML數據屬性指南 Apr 11, 2025 am 11:50 AM

您想了解的有關HTML,CSS和JavaScript中數據屬性的所有信息。

當您看上去時,CSS梯度變得更好 當您看上去時,CSS梯度變得更好 Apr 11, 2025 am 09:16 AM

我關注的一件事是Lea Verou&#039; s conic-Gradient()Polyfill的功能列表是最後一項:

使Sass更快的概念證明 使Sass更快的概念證明 Apr 16, 2025 am 10:38 AM

在一個新項目開始時,Sass彙編發生在眼睛的眨眼中。感覺很棒,尤其是當它與browsersync配對時,它重新加載

靜態表單提供商的比較 靜態表單提供商的比較 Apr 16, 2025 am 11:20 AM

讓我們嘗試在這裡造成一個術語:“靜態表單提供商”。你帶上html

如何在WordPress主題中構建VUE組件 如何在WordPress主題中構建VUE組件 Apr 11, 2025 am 11:03 AM

內聯式模板指令使我們能夠將豐富的VUE組件構建為對現有WordPress標記的逐步增強。

php是A-OK用於模板 php是A-OK用於模板 Apr 11, 2025 am 11:04 AM

PHP模板通常會因促進Subpar代碼而變得不良說唱,但這並不是這樣的情況。讓我們看一下PHP項目如何執行基本的

三種代碼 三種代碼 Apr 11, 2025 pm 12:02 PM

每次啟動一個新項目時,我都會將我正在查看的代碼分為三種類型,或者如果您願意的話。我認為這些類型可以應用於

See all articles