zoukankan      html  css  js  c++  java
  • js动态创建样式: style 和 link

    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); 
        } 
    }
  • 相关阅读:
    英语发音-自然拼读法
    最小二乘法
    BZOJ 1650 [Usaco2006 Dec]River Hopscotch 跳石子
    洛谷 1803 凌乱的yyy
    【模板】矩阵加速(数列)
    【模板】矩阵快速幂
    洛谷 4246 BZOJ 1018 [SHOI2008]堵塞的交通
    洛谷 1276 校门外的树(增强版)
    BZOJ 1468 Tree 【模板】树上点分治
    洛谷 1501 [国家集训队]Tree II BZOJ 2631 Tree
  • 原文地址:https://www.cnblogs.com/stephenykk/p/5406614.html
Copyright © 2011-2022 走看看