静态外部 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中至此,完美解决js动态创建样式: style 和 link,下面是兼容写法:
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); } }