JavaScript改變CSS樣式的方法匯總
JavaScript允許你即時的改變CSS樣式,這樣就可以將用戶的眼球吸引到你想他們關(guān)注的地方上,并且提供較好的交互體驗給力 。
JavaScript修改CSS有4種方法:
修改節(jié)點style(內(nèi)聯(lián)樣式);
改變節(jié)點class或id;
寫入新的css;
替換頁面中的樣式表。
個人不建議使用后兩種方法,幾乎所有的功能都可以通過前兩種方式實現(xiàn),并且代碼更加清晰、易理解。
后面還會說說如何獲取元素的真實樣式和一個表單中的注意事項。
1、修改節(jié)點style(內(nèi)聯(lián)樣式)
這種方法權(quán)重是最高的,直接寫在節(jié)點的style屬性上,他會覆蓋其他方法設(shè)置的樣式。使用方法很簡單:
var element = document.getElementById("test");
element.style.display = "none" //讓元素隱藏
但是要注意的是,有些CSS樣式名稱是由幾個單詞組成的例如font-size、background-image等,他們都是用破折號(-)連接起來的,然而JavaScript中破折號表示“減”,因此不能作為屬性名稱。我們需要使用“駝峰格式(camelCase)”來書寫屬性名,例如fontSize、backgroundImage。
還要注意的是,很多style都是有單位的,不能只給一個數(shù)字。例如fontSize的單位有px、em、%(百分比)等。
這種方法違背了表現(xiàn)和行為分離的原則,一般只適合定義元素經(jīng)常變化的即時樣式(與行為相關(guān)),例如一個可用于拖拽的div,隨著拖拽,他的top、left屬性是不斷變換的,此時就不能用class或其他方式定義了,使用這種方式可以即時修改樣式,并且覆蓋掉其他方式的設(shè)置。
2、更改class、id
id和class是設(shè)置樣式的“鉤子”,更改之后瀏覽器會自動更新元素的樣式。
更改id的方法和class的類似,但是個人并不建議這樣使用,因為id是用于定位元素的,最好不要用它來定義元素的顯示樣式,并且id也常作為JavaScript的鉤子,可能會引起不必要的錯誤。
在JavaScript中,class是一個保留關(guān)鍵字,因此使用className作為訪問元素class的屬性,例如:
.redColor{
color: red;
}
.yellowBack{
background: yellow;
}
element.className = "redColor";//設(shè)置class
element.className += " yellowBack";//增加class
但比較郁悶的是,這個屬性是一個包含元素所有class的字符串,所有class以空格分開,這樣在刪除class時就很不方便(增加就好說,之間做個字符串連接就可以了,不過記得前面要加個空格~)。
我之前在刪除的時候用了正則表達式,根據(jù)class在字符串中的不同位置進行刪除(頭部、尾部、中間),不過后來想到了更好的辦法,就是在className屬性頭尾都加上一個空格,那就全部變成中間的方法了,直接進行子串替換:
//刪除class
function removeClass(element,classRomove){
var classNames = " "+element.className+" ";
classNames = classNames .replace(" "+classRomove+" ", " ");
//String.trim(classNames);
element.className = classNames;
}
一般的樣式修改最好都用這種方法,定義好CSS的樣式,JavaScript只是發(fā)出樣式改變的指令,具體的樣式定義還是交給CSS去做。
后兩種方法,既不優(yōu)雅,也有一定兼容性問題,我就不介紹了~
3、獲取真實樣式
首先要說清楚的是,通過element.style是不行的,他只能獲取內(nèi)聯(lián)樣式,樣式表中的定義無法獲取到。
既然元素的樣式可以定義在這么多種地方,那他的真實樣式到底是什么樣子就不好說了,有什么辦法能獲取到元素在瀏覽器中顯示的真實樣式呢?
其實微軟和W3C都提供了相應(yīng)的方法,我們只需要進行一下封裝就可以用了:
//獲取元素樣式
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)
我們經(jīng)常會見到一些表單的選項是動態(tài)添加的,例如你某個表單中選擇了婚姻狀態(tài)是“已婚”,那么就會多一個輸入框讓你輸入配偶的姓名。
如果沒有選擇那當(dāng)然就要把“配偶”的相關(guān)表單都隱藏了,但在這個時候不應(yīng)當(dāng)用CSS來解決,即不能用style.display=”none”來隱藏。
因為無論你隱還是不隱藏它,輸入框就在那里,不增不減~ [暈] 直白點說,就是雖然隱藏了,但他還是存在與DOM中,如果此時用戶提交表單,會把這個隱藏的輸入框的內(nèi)容一起提交,可能會出現(xiàn)些意想不到的錯誤~
正確的做法是將這段內(nèi)容放入DOM超空間中,這樣就不會有上面的問題了。
以上所述就是本文的全部內(nèi)容了,希望大家能夠喜歡。
相關(guān)文章
Document.body.scrollTop的值總為零的快速解決辦法
這篇文章主要介紹了Document.body.scrollTop的值總為零的解決方法的相關(guān)資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下2016-06-06
JavaScript中實現(xiàn)異步編程模式的4種方法
這篇文章主要介紹了JavaScript中實現(xiàn)異步編程模式的4種方法,本文講解了回調(diào)函數(shù)、事件監(jiān)聽、發(fā)布/訂閱、Promises對象4種方法,需要的朋友可以參考下2014-09-09
layui關(guān)閉彈窗后刷新主頁面和當(dāng)前更改項的例子
今天小編就為大家分享一篇layui關(guān)閉彈窗后刷新主頁面和當(dāng)前更改項的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09
詳解利用exif.js解決ios手機上傳豎拍照片旋轉(zhuǎn)90度問題
這篇文章主要介紹了詳解利用exif.js解決ios手機上傳豎拍照片旋轉(zhuǎn)90度問題,有需要的朋友可以了解一下。2016-11-11
window.addEventListener來解決讓一個js事件執(zhí)行多個函數(shù)
可能你也碰到過這種情況,就是在js的代碼中用了window.onload后,可能會影響到body中的onload事件。這時就要用window.attachEvent和window.addEventListener來解決一下,需要的朋友可以參考下2012-12-12
七個基于JavaScript實現(xiàn)的情人節(jié)表白特效
情人節(jié)將至 程序員證明自己不是直男的時候到啦 我們也有自己的專屬代碼浪漫。本文將介紹七個利用JavaScript實現(xiàn)的情人節(jié)表白特效,需要的可以參考一下2022-01-01

