css基础---操作样式表

使用style对象可以操作行内样式,但无法访问样式表,而使用styleSheets对象可以访问<style>标签定义的内部样式表,以及<link>标签或@import命令导入的外部样式表,styleSheets对象属于document,通过document.styleSheets进行访问。

styleSheets为每个样式表定义了一个cssRules对象,用来包含指定样式表中所有的规则(样式),但IE不支持cssRules,需要使用rules对象表示样式中的规则

var cssRules=document.styleSheets[0].cssRules||document.styleSheets[0].rules;

例1:访问内联样式表

<style>
            #box{
                width:400px;
                height: 200px;
                background-color:#BFFB8F;
                border:solid 1px blue;
            }
        </style>
        <script>
            window.οnlοad=function(){
                var box=document.getElementById("box");
                var cssRules=document.styleSheets[0].cssRules||document.styleSheets[0].rules;
                box.innerHTML="<h3>盒子样式</h3>"
                box.innerHTML+="<br>边框:"+cssRules[0].style.border;
                box.innerHTML+="<br>背景:"+cssRules[0].style.backgroundColor;
                box.innerHTML+="<br>宽度:"+cssRules[0].style.width;
                box.innerHTML+="<br>高度:"+cssRules[0].style.height;
            }
        </script>
    </head>
    <body>
     <div id="box"></div>
    </body>

例2:访问样式表中的样式

  访问内部 样式表---

<style>
            #box{
                width:400px;
                height: 200px;
                background-color:#BFFB8F;
                border:solid 1px blue;
            }
        </style>
        <script>
            window.οnlοad=function(){
                var box=document.getElementById("box");
                var cssRules=document.styleSheets[0].cssRules||document.styleSheets[0].rules;
                box.innerHTML="<h3>盒子样式</h3>"
                box.innerHTML+="<br>边框:"+cssRules[0].style.border;
                box.innerHTML+="<br>背景:"+cssRules[0].style.backgroundColor;
                box.innerHTML+="<br>宽度:"+cssRules[0].style.width;
                box.innerHTML+="<br>高度:"+cssRules[0].style.height;
            }
        </script>

访问外部样式表---

style1.css:

body{color:black;}
p{color:gray;}
div{color:white;}

--

<style>
            #box{color:green;}
            .red{color:red;}
            .blue{color:blue;}
        </style>
        <link rel="stylesheet" type="text/css" href="css/style1.css"/>
        <script type="text/javascript">
            window.οnlοad=function(){
                var box=document.getElementById("box");
                var cssRules0=document.styleSheets[0].cssRules||document.styleSheets[0].rules;
                var cssRules=document.styleSheets[1].cssRules||document.styleSheets[1].rules;

             box.innerHTML="第二个样式表中,第一个样式的color属性值="+cssRules[0].style.color;//black
             box.innerHTML+="<br>第一个样式表中第三个样式选择符="+cssRules0[2].selectorText;//.blue读取样式的选择符  
               cssRules0[2].style.color="#999";//编辑样式
            }
        </script>
    </head>
    <body>
        <div id="box"></div>
        <p class="blue">原蓝色字体,变为浅灰色</p>
    </body>

添加样式 styleSheet.addRule(selector,style,[index])   、styleSheet.inserRule(rule,[index]);

 styleSheet.addRule(selector,style,[index]);//选择符(字符串),样式声明(字符串),索引号(默认-1,表示样式表的末尾)

但Firefox不支持addRule,使用

styleSheet.inserRule(rule,[index]);//完整样式(字符串),索引号(默认为0,放置在样式表的末尾)

<style>
            #box{color:green;}
            .red{color:red;}
            .blue{color:blue;}
        </style>
        <script type="text/javascript">
            var styleSheets=document.styleSheets[0];
            var index=styleSheets.length;//获取样式表中包含的个数
            if(styleSheets.insertRule){
                styleSheets.insertRule("p{background-color:red;color:#fff;padding:1 em;}",index);
            }else{
                styleSheets.addRule("P","background-color:red;color:#fff;padding:1 em;",index)
            }
        </script>
    </head>
    <body>
        <p>在样式表中添加样式</p>
    </body>

访问显示样式p.currentStyle.backgroundColor   或 document.defaultView.getComputedStyle(p,null).backgroundColor

IE下:currentStyle只读对象,此对象包含了文档内所有元素的style对象的属性,以及任何未被覆盖的CSS规则的style属性

样式重叠是,可使用currentStyle对象获取当前p元素的最终显示哪些样式,这样可以找到inserRule()或addRule()添加样式失效的原因

非IE下:document.defaultView对象下getComputedStyle(p,null)方法:第一个参数表示元素,第二个参数表示伪类字符串,定义显示位置,一般可以省略,或者设置为null

<style>
            #box{color:green;}
            .red{color:red;}
            .blue{color:blue;background-color: #FFFFFF;}
        </style>
        <script type="text/javascript">

window.οnlοad=function(){
            var styleSheets=document.styleSheets[0];
            var index=styleSheets.length;//获取样式表中包含的个数
            if(styleSheets.insertRule){
                styleSheets.insertRule("p{background-color:red;color:#fff;padding:1 em;}",index);
            }else{
                styleSheets.addRule("P","background-color:red;color:#fff;padding:1 em;",index);
            }
            var p=document.getElementsByTagName("p")[0];
            if(document.defaultView && document.defaultView.getComputedStyle){//非IE
                p.innerHTML="背景色:"+document.defaultView.getComputedStyle(p,null).backgroundColor
                +"<br>字体颜色:"+document.defaultView.getComputedStyle(p,null).color;
            }else if(p.currentStyle){//IE
                p.innerHTML="背景色:"+p.currentStyle.backgroundColor+"<br>字体颜色:"+p.currentStyle.color;
            }else{
                p.innerHTML="当前浏览器无法取得最终显示样式";
            }

     }
        </script>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值