javascript 動(dòng)態(tài)生成css代碼的兩種方法
javascript 動(dòng)態(tài)生成css代碼的兩種方法
有時(shí)候我們需要利用js來動(dòng)態(tài)生成頁面上style標(biāo)簽中的css代碼,方法很直接,就是直接創(chuàng)建一個(gè)style元素,然后設(shè)置style元素里面的css代碼,最后把它插入到head元素中。但有些兼容性問題我們需要解決。首先在符合w3c標(biāo)準(zhǔn)的瀏覽器中我們只需要把要插入的css代碼作為一個(gè)文本節(jié)點(diǎn)插入到style元素中即可,而在IE中則需要利用style元素的styleSheet.cssText來解決。還需要注意的就是在有些版本IE中一個(gè)頁面上style標(biāo)簽數(shù)量是有限制的,如果超過了會(huì)報(bào)錯(cuò),需要考慮這點(diǎn)。
方法1:
給<style id="css">標(biāo)簽添加一個(gè)id名,在<script>標(biāo)簽中寫
var oCss=document.getElementById("css");
oCss.innerHTML+="#box{width:200px;}";
這樣就可以加上樣式了。
方法2:
有時(shí)候我們需要利用js來動(dòng)態(tài)生成頁面上style標(biāo)簽中的css代碼,方法很直接,就是直接創(chuàng)建一個(gè)style元素,然后設(shè)置style元素里面的css代碼,最后把它插入到head元素中。但有些兼容性問題我們需要解決。首先在符合w3c標(biāo)準(zhǔn)的瀏覽器中我們只需要把要插入的css代碼作為一個(gè)文本節(jié)點(diǎn)插入到style元素中即可,而在IE中則需要利用style元素的styleSheet.cssText來解決。還需要注意的就是在有些版本IE中一個(gè)頁面上style標(biāo)簽數(shù)量是有限制的,如果超過了會(huì)報(bào)錯(cuò),需要考慮這點(diǎn)。
下面直接放上代碼,看注釋說明。
function addCSS(cssText){
var style = document.createElement('style'), //創(chuàng)建一個(gè)style元素
head = document.head || document.getElementsByTagName('head')[0]; //獲取head元素
style.type = 'text/css'; //這里必須顯示設(shè)置style元素的type屬性為text/css,否則在ie中不起作用
if(style.styleSheet){ //IE
var func = function(){
try{ //防止IE中stylesheet數(shù)量超過限制而發(fā)生錯(cuò)誤
style.styleSheet.cssText = cssText;
}catch(e){
}
}
//如果當(dāng)前styleSheet還不能用,則放到異步中則行
if(style.styleSheet.disabled){
setTimeout(func,10);
}else{
func();
}
}else{ //w3c
//w3c瀏覽器中只要?jiǎng)?chuàng)建文本節(jié)點(diǎn)插入到style元素中就行了
var textNode = document.createTextNode(cssText);
style.appendChild(textNode);
}
head.appendChild(style); //把創(chuàng)建的style元素插入到head中
}
//使用
addCSS('#demo{ height: 30px; background:#f00;}');
當(dāng)然這只是一個(gè)最基本的演示方法,實(shí)際運(yùn)用中還需進(jìn)行完善,比如把每次生成的css代碼都插入到一個(gè)style元素中,這樣在IE中就不會(huì)發(fā)生stylesheet數(shù)量超出限制的錯(cuò)誤了。
總結(jié):以上方法可以解決很多問題,有什么不懂的找我!
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
使用Fuse.js實(shí)現(xiàn)高效的模糊搜索功能
在現(xiàn)代?Web?應(yīng)用程序中,實(shí)現(xiàn)高效的搜索功能是至關(guān)重要的,Fuse.js?是一個(gè)強(qiáng)大的?JavaScript?庫,它提供了靈活的模糊搜索和文本匹配功能,使您能夠輕松實(shí)現(xiàn)出色的搜索體驗(yàn),文中代碼示例講解的非常詳細(xì),需要的朋友可以參考下2024-01-01
JS實(shí)現(xiàn)經(jīng)典的中國地區(qū)三級(jí)聯(lián)動(dòng)下拉菜單功能實(shí)例【測(cè)試可用】
這篇文章主要介紹了JS實(shí)現(xiàn)經(jīng)典的中國地區(qū)三級(jí)聯(lián)動(dòng)下拉菜單功能,結(jié)合完整實(shí)例形式分析了javascript基于事件響應(yīng)實(shí)現(xiàn)頁面元素動(dòng)態(tài)變換的相關(guān)操作技巧,需要的朋友可以參考下2017-06-06
JavaScript實(shí)現(xiàn)文本轉(zhuǎn)語音功能的完整步驟
這篇文章主要介紹了如何使用JavaScript和WebSpeechAPI快速實(shí)現(xiàn)一個(gè)簡單的文本轉(zhuǎn)語音Web應(yīng)用,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-02-02
JS 設(shè)置Cookie 有效期 檢測(cè)cookie
這篇文章主要介紹了JS 設(shè)置Cookie 有效期 檢測(cè)cookie的相關(guān)資料,需要的朋友可以參考下2017-06-06
mapboxgl區(qū)劃標(biāo)簽避讓不遮蓋實(shí)現(xiàn)的代碼詳解
Mapbox是一個(gè)可以免費(fèi)創(chuàng)建并定制個(gè)性化地圖的網(wǎng)站。這篇文章主要介紹了mapboxgl區(qū)劃標(biāo)簽避讓不遮蓋實(shí)現(xiàn)方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
JS+DIV實(shí)現(xiàn)鼠標(biāo)劃過切換層效果的實(shí)例代碼
這篇文章主要是對(duì)JS+DIV實(shí)現(xiàn)鼠標(biāo)劃過切換層效果的實(shí)例代碼進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助2013-11-11
使用eslint和githooks統(tǒng)一前端風(fēng)格的技巧
這篇文章主要介紹了使用eslint和githooks統(tǒng)一前端風(fēng)格,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07

