js動態創建樣式: style 和 link
ie6 不能 document.createElement('style') 然后append到head標簽里。所以就找到這樣個好文章
有很多提供動態創建 style 節點的方法,但是大多數都僅限於外部的 css 文件。如何能使用程序生成的字符串動態創建 style 節點,我搞了2個小時。
靜態外部 css 文件語法: @import url(style.css);
動態外部 css 文件加載的方法有如下:
第一種: 創建link節點 href屬性引入外部css, link節點append到文檔中
在編寫組件的情況下,為每個組件單獨引入外部樣式文件的方法不大好,比較理想的是js直接完成樣式輸出
var style = document.createElement(’link’);
style.href = ’style.css’;
style.rel = ’stylesheet’;
style.type = ‘text/css’;
document.getElementsByTagName(’HEAD’).item(0).appendChild(style);
第二種簡單:document.createStyleSheet(style.css) // IE ONLY
document.createStyleSheet( url )
這是ie才有的方法,url可以是 "javascript:stylestr;"的形式 ;chrome firefox無此方法
document.createStyleSheet(style.css);
第三種: 動態的 style 節點 // W3C
創建style節點 innerHTML屬性寫入樣式內容,style節點append到head中 chrome firefox 支持
var style = document.createElement(’style’);
style.type = ‘text/css’;
style.innerHTML=”body{ background-color:blue; }”;
document.getElementsByTagName(’HEAD’).item(0).appendChild(style);
很遺憾,上面的代碼在 ff 里面成功,但是 ie 不支持。從老外論壇得到代碼:
var sheet = document.createStyleSheet();
sheet.addRule(’body’,'background-color:red’);
成功,但是很麻煩,要把字符串拆開寫,長一點的寫死,累的像狗一樣。
接着搜,在一個不知道什么國家的什么語言的blog上找到代碼:
document.createStyleSheet(”javascript:’body{background-color:blue;’”);
成功,此人實在厲害,但是問題出來了,url 最大 255 個字符,長一點的就不行了,改:
window.style=”body{background-color:blue;”;
document.createStyleSheet(”javascript:style”);
document.createStyleSheet( "javascript: stylestr") 直接創建stylesheet節點 會自動append到head中
完美解決!!
function blue(){
if(document.all){ // document.createStyleSheet(url)
window.style="body{background-color:blue;";
document.createStyleSheet("javascript:style");
}else{ //document.createElement(style)
var style = document.createElement('style');
style.type = 'text/css';
style.innerHTML="body{ background-color:blue }";
document.getElementsByTagName('HEAD').item(0).appendChild(style);
}
}