JS如何設(shè)置元素樣式?

一看到這個(gè)標(biāo)題,大家可能首先想到的就是使用“[元素].style.[CSS屬性名] = [屬性值]”這樣的套路去設(shè)置元素樣式,但實(shí)際上,我們其實(shí)還有其他方式可以選擇。

接下來玲躯,我將詳細(xì)介紹三種設(shè)置元素樣式的方式。

一鳄乏、style

這個(gè)其實(shí)就是我們所熟知的方式跷车,舉個(gè)例子~~

<div id="box"></div>
var box = document.getElementById("box");
box.style.width = '100px';
box.style.height = '100px';
box.style.backgroundColor = "#f00";

顯示效果:

這種方式看似簡單粗暴,但寫法過于繁冗橱野,尤其是在需要添加很多樣式時(shí)尤為突出朽缴。并且需要注意的是,對(duì)于使用短劃線的CSS屬性名仲吏,必須將其轉(zhuǎn)換成駝峰大小寫形式不铆。(如示例中的backgroundColor)

二、style.cssText

這種方式相對(duì)于上面方法更為簡潔裹唆,更像是直接在元素上寫CSS:

[元素].style.cssText = [CSS樣式];

例如:

box.style.cssText = 'width: 200px; height: 200px; border: 1px solid #f00;';

確實(shí)誓斥,寫法上很方便。

但是许帐,缺點(diǎn)是后面同樣通過這種方式添加的樣式會(huì)覆蓋之前通過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)該還存在距芬,然而實(shí)際上涝开,下面通過style.cssText方式定義的樣式會(huì)將style(包括style.cssText)方式添加的樣式全部重寫。所以框仔,這個(gè)例子最終表現(xiàn)結(jié)果與上面只有一句時(shí)的效果是一樣的:

最后注意下兼容性舀武,IE8及更早版本均不支持cssText。

三离斩、insertRule()

這個(gè)用法相對(duì)上面兩種方法都較為復(fù)雜一些:

[sheet].insertRule([CSS樣式]银舱,指定位置)

[sheet]表示某個(gè)樣式表,它可以通過document.styleSheets來獲得跛梗。那么寻馏,document.styleSheets又是什么呢? 說得簡單一點(diǎn)就是應(yīng)用在文檔中的所有樣式表核偿,包括通過link標(biāo)簽引入的樣式和style標(biāo)簽定義的樣式诚欠。如果理解上還是有點(diǎn)困難,那么我們還是放個(gè)實(shí)例吧~~

首先頭部引入樣式表:

<link rel="stylesheet" type="text/css" href="css/index.css"/>

當(dāng)然漾岳,這個(gè)樣式表得真實(shí)存在轰绵,就算里面什么樣式都不寫也沒關(guān)系。也可以直接用style標(biāo)簽蝗羊,內(nèi)容為空也不要緊藏澳。

然后用JS獲取這個(gè)樣式表:

var sheet = document.styleSheets[0];

最后我們就可以給這個(gè)樣式表中添加樣式了:

sheet.insertRule('#box{width: 300px; height: 300px; background-color: #0f0;}',0);

如果是在上面所有例子的基礎(chǔ)上添加的這段代碼仁锯,那么顯示結(jié)果會(huì)是這樣的:

大小還是200*200大小耀找,背景顏色是綠色,說明通過style.cssText所設(shè)置的寬高樣式把通過insertRule()設(shè)置的樣式覆蓋了业崖,原因很簡單野芒,style(包括style.cssText)方式設(shè)置的樣式屬于行內(nèi)樣式,自然要比通過insertRule()設(shè)置的樣式優(yōu)先級(jí)更高咯~~

那么双炕,示例當(dāng)中insertRule()的第二個(gè)參數(shù)0又是指的什么呢狞悲?

它指的是我們需要添加CSS代碼的位置,所以參數(shù)0就代表的是該樣式表的最開始位置妇斤。

例如摇锋,我們先給樣式表中手動(dòng)添加一段樣式(以下例子與上述例子無關(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()中的第二個(gè)參數(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()替代融求,語法稍微有點(diǎn)不同,上面例子這樣寫:

sheet.addRule('#box','width: 300px; height: 300px; background-color: #0f0;',0);

第一個(gè)參數(shù)代表元素算撮,第二個(gè)參數(shù)代表CSS樣式生宛,第三個(gè)參數(shù)代表插入位置县昂,前兩個(gè)參數(shù)必選,最后一個(gè)可選陷舅,不填則默認(rèn)為0倒彰。

結(jié)束語:瀏覽器兼容性問題對(duì)于前端開發(fā)者來說一直是個(gè)很頭疼的問題,很多問題也是主要集中在IE上莱睁,只希望可惡的IE早日退出歷史舞臺(tái)吧狸驳!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市缩赛,隨后出現(xiàn)的幾起案子耙箍,更是在濱河造成了極大的恐慌,老刑警劉巖酥馍,帶你破解...
    沈念sama閱讀 223,002評(píng)論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辩昆,死亡現(xiàn)場離奇詭異,居然都是意外死亡旨袒,警方通過查閱死者的電腦和手機(jī)汁针,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來砚尽,“玉大人施无,你說我怎么就攤上這事”毓拢” “怎么了猾骡?”我有些...
    開封第一講書人閱讀 169,787評(píng)論 0 365
  • 文/不壞的土叔 我叫張陵,是天一觀的道長敷搪。 經(jīng)常有香客問我兴想,道長,這世上最難降的妖魔是什么赡勘? 我笑而不...
    開封第一講書人閱讀 60,237評(píng)論 1 300
  • 正文 為了忘掉前任嫂便,我火速辦了婚禮,結(jié)果婚禮上闸与,老公的妹妹穿的比我還像新娘毙替。我一直安慰自己,他們只是感情好践樱,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,237評(píng)論 6 398
  • 文/花漫 我一把揭開白布厂画。 她就那樣靜靜地躺著,像睡著了一般映胁。 火紅的嫁衣襯著肌膚如雪木羹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,821評(píng)論 1 314
  • 那天,我揣著相機(jī)與錄音坑填,去河邊找鬼抛人。 笑死,一個(gè)胖子當(dāng)著我的面吹牛脐瑰,可吹牛的內(nèi)容都是我干的妖枚。 我是一名探鬼主播,決...
    沈念sama閱讀 41,236評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼苍在,長吁一口氣:“原來是場噩夢啊……” “哼绝页!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起寂恬,我...
    開封第一講書人閱讀 40,196評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤续誉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后初肉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體酷鸦,經(jīng)...
    沈念sama閱讀 46,716評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,794評(píng)論 3 343
  • 正文 我和宋清朗相戀三年牙咏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了臼隔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,928評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡妄壶,死狀恐怖摔握,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情丁寄,我是刑警寧澤氨淌,帶...
    沈念sama閱讀 36,583評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站狡逢,受9級(jí)特大地震影響宁舰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜奢浑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,264評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望腋腮。 院中可真熱鬧雀彼,春花似錦、人聲如沸即寡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽聪富。三九已至莺丑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背梢莽。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評(píng)論 1 274
  • 我被黑心中介騙來泰國打工萧豆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人昏名。 一個(gè)月前我還...
    沈念sama閱讀 49,378評(píng)論 3 379
  • 正文 我出身青樓涮雷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親轻局。 傳聞我的和親對(duì)象是個(gè)殘疾皇子洪鸭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,937評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,762評(píng)論 1 92
  • 從今年上半年開始更文仑扑,持續(xù)到了今天览爵,這一路走來,你要問我收獲了什么镇饮。那我可以自豪地告訴你拾枣,寫作能力有了前所未有的提...
    在水一方含閱讀 109評(píng)論 0 3
  • “砰,砰盒让,砰” 心臟重重的跳著梅肤,牧楓的整個(gè)身體都僵持在原地,過度的緊張甚至讓他忘記了如何呼吸邑茄,唯一的反應(yīng)姨蝴,只剩下那...
    DMC23閱讀 323評(píng)論 0 2