JavaScript改變CSS樣式的方法總結_javascript技巧
JavaScript允許你即時的改變CSS樣式,這樣就可以將使用者的眼球吸引到你想他們關注的地方上,並且提供較好的互動體驗給力 。
JavaScript修改CSS有4種方法:
修改節點style(內聯樣式);
改變節點class或id;
寫入新的css;
替換頁面中的樣式表。
個人不建議使用後兩種方法,幾乎所有的功能都可以透過前兩種方式實現,而且程式碼更加清晰、易於理解。
後面還會說說如何取得元素的真實樣式和一個表單中的注意事項。
1、修改節點style(內聯樣式)
這種方法權重是最高的,直接寫在節點的style屬性上,他會覆蓋其他方法設定的樣式。使用方法很簡單:
var element = document.getElementById("test"); element.style.display = "none" //让元素隐藏
但是要注意的是,有些CSS樣式名稱是由幾個單字組成的例如font-size、background-image等,他們都是用破折號(-)連接起來的,然而JavaScript中破折號表示“減” ,因此不能作為屬性名稱。我們需要使用「駝峰格式(camelCase)」來書寫屬性名,例如fontSize、backgroundImage。
還要注意的是,很多style都是有單位的,不能只給一個數字。例如fontSize的單位有px、em、%(百分比)等。
這種方法違反了表現和行為分離的原則,一般只適合定義元素經常變化的即時樣式(與行為相關),例如一個可用於拖曳的div,隨著拖拽,他的top、left屬性是不斷變換的,此時就不能用class或其他方式定義了,使用這種方式可以即時修改樣式,並且覆寫其他方式的設定。
2、更改class、id
id和class是設定樣式的“鉤子”,更改之後瀏覽器會自動更新元素的樣式。
更改id的方法和class的類似,但是個人並不建議這樣使用,因為id是用於定位元素的,最好不要用它來定義元素的顯示樣式,並且id也常作為JavaScript的鉤子,可能會引起不必要的錯誤。
在JavaScript中,class是一個保留關鍵字,因此使用className作為存取元素class的屬性,例如:
.redColor{ color: red; } .yellowBack{ background: yellow; } element.className = "redColor";//设置class element.className += " yellowBack";//增加class
但比較鬱悶的是,這個屬性是一個包含元素所有class的字串,所有class以空格分開,這樣在刪除class時就很不方便(增加就好說,之間做個字串連接就可以了,不過記得前面要加個空格~)。
我之前在刪除的時候用了正規表示式,根據class在字串中的不同位置進行刪除(頭部、尾部、中間),不過後來想到了更好的辦法,就是在className屬性頭尾都加上一個空格,那就全部變成中間的方法了,直接進行子字串替換:
//删除class function removeClass(element,classRomove){ var classNames = " "+element.className+" "; classNames = classNames .replace(" "+classRomove+" ", " "); //String.trim(classNames); element.className = classNames; }
一般的樣式修改最好都用這種方法,定義好CSS的樣式,JavaScript只是發出樣式改變的指令,具體的樣式定義還是交給CSS去做。
後兩種方法,既不優雅,也有一定相容性問題,我就不介紹了~
3、取得真實樣式
首先要說清楚的是,透過element.style是不行的,他只能取得內聯樣式,樣式表中的定義無法取得。
既然元素的樣式可以定義在這麼多種地方,那他的真實樣式到底是什麼樣子就不好說了,有什麼辦法能獲取到元素在瀏覽器中顯示的真實樣式呢?
其實微軟和W3C都提供了對應的方法,我們只要進行一下封裝就可以用了:
//获取元素样式 function getRealStyle(element,styleName){ var realStyle = null; if(element.currentStyle){ realStyle = element.currentStyle[styleName];//IE }else if(window.getComputedStyle){ realStyle=window.getComputedStyle(element,null)[styleName];//W3C } return realStyle; }
記得傳入的styleName是用「駝峰格式」的~~
4、表單的顯示與隱藏(不要濫用CSS)
我們經常會見到一些表單的選項是動態添加的,例如你某個表單中選擇了婚姻狀態是“已婚”,那麼就會多一個輸入框讓你輸入配偶的姓名。
如果沒有選擇那當然就要把「配偶」的相關表單都隱藏了,但在這個時候不應當用CSS來解決,即不能用style.display=」none」來隱藏。
因為無論你隱或不隱藏它,輸入框就在那裡,不增不減~ [暈] 直白點說,就是雖然隱藏了,但他還是存在與DOM中,如果此時用戶提交表單,會把這個隱藏的輸入框的內容一起提交,可能會出現一些意想不到的錯誤~
正確的做法是將這段內容放入DOM超空間中,這樣就不會有上面的問題了。
以上所述就是本文的全部內容了,希望大家能夠喜歡。

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

熱門話題

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

如何利用JavaScript和WebSocket實現即時線上點餐系統介紹:隨著網路的普及和技術的進步,越來越多的餐廳開始提供線上點餐服務。為了實現即時線上點餐系統,我們可以利用JavaScript和WebSocket技術。 WebSocket是一種基於TCP協定的全雙工通訊協議,可實現客戶端與伺服器的即時雙向通訊。在即時線上點餐系統中,當使用者選擇菜餚並下訂單

如何使用WebSocket和JavaScript實現線上預約系統在當今數位化的時代,越來越多的業務和服務都需要提供線上預約功能。而實現一個高效、即時的線上預約系統是至關重要的。本文將介紹如何使用WebSocket和JavaScript來實作一個線上預約系統,並提供具體的程式碼範例。一、什麼是WebSocketWebSocket是一種在單一TCP連線上進行全雙工

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

用法:在JavaScript中,insertBefore()方法用於在DOM樹中插入一個新的節點。這個方法需要兩個參數:要插入的新節點和參考節點(即新節點將要插入的位置的節點)。

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

JavaScript是一種廣泛應用於Web開發的程式語言,而WebSocket則是一種用於即時通訊的網路協定。結合二者的強大功能,我們可以打造一個高效率的即時影像處理系統。本文將介紹如何利用JavaScript和WebSocket來實作這個系統,並提供具體的程式碼範例。首先,我們需要明確指出即時影像處理系統的需求和目標。假設我們有一個攝影機設備,可以擷取即時的影像數
