JS如何設(shè)置元素樣式的方法示例
一看到這個標(biāo)題,大家可能首先想到的就是使用“[元素].style.[CSS屬性名] = [屬性值]”這樣的套路去設(shè)置元素樣式,但實際上,我們其實還有其他方式可以選擇。
接下來,我將詳細(xì)介紹三種設(shè)置元素樣式的方式。
一、style
這個其實就是我們所熟知的方式,舉個例子~~
<div id="box"></div>
var box = document.getElementById("box");
box.style.width = '100px';
box.style.height = '100px';
box.style.backgroundColor = "#f00";
顯示效果:

這種方式看似簡單粗暴,但寫法過于繁冗,尤其是在需要添加很多樣式時尤為突出。并且需要注意的是,對于使用短劃線的CSS屬性名,必須將其轉(zhuǎn)換成駝峰大小寫形式。(如示例中的backgroundColor)
二、style.cssText
這種方式相對于上面方法更為簡潔,更像是直接在元素上寫CSS:
[元素].style.cssText = [CSS樣式];
例如:
box.style.cssText = 'width: 200px; height: 200px; border: 1px solid #f00;';
確實,寫法上很方便。
但是,缺點是后面同樣通過這種方式添加的樣式會覆蓋之前通過style特性指定的樣式。
同樣還是上面的例子,只不過是將兩段JS寫在一塊:
var box = document.getElementById("box");
box.style.width = '100px';
box.style.height = '100px';
box.style.backgroundColor = "#f00";
box.style.cssText = 'width: 200px; height: 200px; border: 1px solid #f00;';
如果按照層疊樣式表的特性,上面定義的紅色的背景顏色應(yīng)該還存在,然而實際上,下面通過style.cssText方式定義的樣式會將style(包括style.cssText)方式添加的樣式全部重寫。所以,這個例子最終表現(xiàn)結(jié)果與上面只有一句時的效果是一樣的:

最后注意下兼容性,IE8及更早版本均不支持cssText。
三、insertRule()
這個用法相對上面兩種方法都較為復(fù)雜一些:
[sheet].insertRule([CSS樣式],指定位置)
[sheet]表示某個樣式表,它可以通過document.styleSheets來獲得。那么,document.styleSheets又是什么呢? 說得簡單一點就是應(yīng)用在文檔中的所有樣式表,包括通過link標(biāo)簽引入的樣式和style標(biāo)簽定義的樣式。如果理解上還是有點困難,那么我們還是放個實例吧~~
首先頭部引入樣式表:
<link rel="stylesheet" type="text/css" href="css/index.css" rel="external nofollow" />
當(dāng)然,這個樣式表得真實存在,就算里面什么樣式都不寫也沒關(guān)系。也可以直接用style標(biāo)簽,內(nèi)容為空也不要緊。
然后用JS獲取這個樣式表:
var sheet = document.styleSheets[0];
最后我們就可以給這個樣式表中添加樣式了:
sheet.insertRule('#box{width: 300px; height: 300px; background-color: #0f0;}',0);
如果是在上面所有例子的基礎(chǔ)上添加的這段代碼,那么顯示結(jié)果會是這樣的:

大小還是200*200大小,背景顏色是綠色,說明通過style.cssText所設(shè)置的寬高樣式把通過insertRule()設(shè)置的樣式覆蓋了,原因很簡單,style(包括style.cssText)方式設(shè)置的樣式屬于行內(nèi)樣式,自然要比通過insertRule()設(shè)置的樣式優(yōu)先級更高咯~~
那么,示例當(dāng)中insertRule()的第二個參數(shù)0又是指的什么呢?
它指的是我們需要添加CSS代碼的位置,所以參數(shù)0就代表的是該樣式表的最開始位置。
例如,我們先給樣式表中手動添加一段樣式(以下例子與上述例子無關(guān)):
<style>
#box{ width: 100px; height: 100px;}
</style>
var sheet = document.styleSheets[0];
sheet.insertRule('#box{width: 300px; height: 300px; background-color: #0f0;}',0);
以上執(zhí)行結(jié)果就是,寬高100*100的綠色盒子:

如果將insertRule()中的第二個參數(shù)改為1,那么通過JS添加的這段CSS代碼相當(dāng)于添加到了#box{ width: 100px; height: 100px;}的后面,類似下面這樣:
<style>
#box{ width: 100px; height: 100px;}
#box{ width: 300px; height: 300px; background-color: #0f0;}
</style>
顯示結(jié)果:

同樣需要注意的是,insertRule()不兼容IE8及更早版本,但可以使用addRule()替代,語法稍微有點不同,上面例子這樣寫:
sheet.addRule('#box','width: 300px; height: 300px; background-color: #0f0;',0);
第一個參數(shù)代表元素,第二個參數(shù)代表CSS樣式,第三個參數(shù)代表插入位置,前兩個參數(shù)必選,最后一個可選,不填則默認(rèn)為0。
結(jié)束語:瀏覽器兼容性問題對于前端開發(fā)者來說一直是個很頭疼的問題,很多問題也是主要集中在IE上,只希望可惡的IE早日退出歷史舞臺吧!希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Javascript中查找不以XX字符結(jié)尾的單詞示例代碼
我在寫這篇文章之前花了2個多小時在弄正則表達(dá)式,下為大家介紹下具體的實現(xiàn)思路,感興趣的朋友可以參考下2013-10-10
layui(1.0.9)文件上傳upload,前后端的實例代碼
今天小編就為大家分享一篇layui(1.0.9)文件上傳upload,前后端的實例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09
clientX,pageX,offsetX,x,layerX,screenX,offsetLeft區(qū)別分析
clientX,pageX,offsetX,x,layerX,screenX,offsetLeft區(qū)別分析,需要的朋友可以參考下。2010-03-03
Javascript中內(nèi)建函數(shù)reduce的應(yīng)用詳解
內(nèi)建函數(shù)其實就是內(nèi)置函數(shù),reduce函數(shù)是ECMAScript5規(guī)范中出現(xiàn)的數(shù)組方法。在平時的工作中,相信大家使用的場景并不多,這篇文章給大家詳細(xì)介紹了函數(shù)reduce的應(yīng)用以及多重疊加,有需要的朋友們可以參考借鑒,下面來一起看看吧。2016-10-10
JavaScript中Iterator迭代器接口和循環(huán)
這篇文章主要介紹了JavaScript中Iterator迭代器接口和循環(huán),迭代器是數(shù)據(jù)結(jié)構(gòu)遍歷的一種機制迭代器主要是提供for...of使用,更多相關(guān)內(nèi)推需要的小伙伴可以參考下面文章內(nèi)容2022-06-06

