JS获取CSS样式(style/getComputedStyle/currentStyle)


Posted in Javascript onJanuary 19, 2016

CSS的样式分为三类:
内嵌样式:是写在Tag里面的,内嵌样式只对所有的Tag有效。
内部样式:是写在HTML的里面的,内部样式只对所在的网页有效。
外部样式表:如果很多网页需要用到同样的样式(Styles),将样式(Styles)写在一个以.css为后缀的CSS文件里,然后在每个需要用到这 些样式(Styles)的网页里引用这个CSS文件。

getComputedStyle是一个可以获取当前元素所有最终使用的CSS属性值。返回的是一个CSS样式对象([object CSSStyleDeclaration])
currentStyle是IE浏览器的一个属性,返回的是CSS样式对象

element指JS获取的DOM对象
element.style //只能获取内嵌样式
element.currentStyle //IE浏览器获取非内嵌样式
window.getComputedStyle(element,伪类) //非IE浏览器获取非内嵌样式
document.defaultView.getComputedStyle(element,伪类)//非IE浏览器获取非内嵌样式
注:Gecko 2.0 (Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1) 之前,第二个参数“伪类”是必需的(如果不是伪类,设置为null),现在可以省略这个参数。

下面的html中包含两种css样式,id为tag的div是内嵌样式,而id为test的div样式为内部样式.

<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name="Generator" content="EditPlus®">
    <meta name="Author" content="Yvette Lau">
    <meta name="Keywords" content="关键字">
    <meta name="Description" content="描述">
    <title>Document</title>
    <style>
      #test{
        width:500px;
        height:300px;
        background-color:#CCC;
        float:left;
      }
    </style>
  </head>
  <body>
    <div id = "test"></div>
    <div id = "tag" style = "width:500px; height:300px;background-color:pink;"></div>
  </body>
</html>

JS部分

<script type = "text/javascript">
  window.onload = function(){
    var test = document.getElementById("test");
    var tag = document.getElementById("tag");

    //CSS样式对象:CSS2Properties{},CSSStyleDeclaration
    console.log(test.style); //火狐返回空对象CSS2Properties{},谷歌返回空对象CSSStyleDeclaration{} 
    console.log(tag.style); //返回CSS2Properties{width:"500px",height:"300px",background-color:"pink"}
    //element.style获取的是内嵌式的style,如果不是内嵌式,则是一个空对象

    console.log(tag.style.backgroundColor);//pink
    console.log(tag.style['background-color']);//pink
    //获取类似background-color,border-radius,padding-left类似样式的两种写法啊

    console.log(test.currentStyle) //火狐和谷歌为Undefined,IE返回CSS对象
    console.log(window.getComputedStyle(test,null))//谷歌返回CSSStyleDeclaration{……} ,火狐返回CSS2Properties{……}
    console.log(window.getComputedStyle(test))
    //效果同上,但是在Gecko 2.0 (Firefox 4/Thunderbird 3.3/SeaMonkey 2.1) 之前,第二个参数“伪类”是必需的(如果不是伪类,设置为null)

    console.log(test.currentStyle.width);//500px(IE)
    console.log(window.getComputedStyle(test).width); //500px;
    console.log(window.getComputedStyle(test)['width']);//500px;
    //document.defaultView.getComputedStyle(element,null)[attr]/window.getComputedStyle(element,null)[attr]   
  }
</script>

以上的例子仅是验证前面的论述是否正确。

为了简单,我们也可以对获取样式做一个简单的封装。

function getStyle(element, attr){
      if(element.currentStyle){
        return element.currentStyle[attr];
      }else{
        return window.getComputedStyle(element,null)[attr];
      }
    }
    console.log(getStyle(test,"cssFloat"));//left
    console.log(getStyle(test,"float"));  //left,早前FF和chrome需要使用cssFloat,不过现在已经不必
    console.log(getStyle(test,"stylefloat"));//火狐和谷歌都是undefined
    console.log(getStyle(test,"styleFloat")); //IE9以下必须使用styleFloat,IE9及以上,支持styleFloat和cssFloat

    console.log(window.getComputedStyle(test).getPropertyValue("float"))

对应float样式,IE中使用的是styleFloat,而早前的FF和chrome使用的是cssFloat,现在FF和Chrome已经支持float,还有一些其他的属性,不再一一列出,为了不去记忆这些差异点,我们引出两个访问CSS样式对象的方法:
getPropertyValue方法和getAttribute方法

IE9及其它浏览器(getPropertyValue)
window.getComputedStyle(element, null).getPropertyValue(“float”);
element.currentStyle.getPropertyValue(“float”);
getPropertyValue不支持驼峰写法。(兼容IE9及以上,FF,Chrom,Safari,Opera)
如:window.getComputedStyle(element,null).getPropertyValue(“background-color”);

对于IE6~8,需要使用getAttribute方法,用于访问CSS样式对象的属性

element.currentStyle.getAttribute(“float”);//不再需要写成styleFloat
element.currentStyle.getAttribute(“backgroundColor”);//属性名需要写成驼峰写法,否则IE6不支持,如果无视IE6,可以写成”background-color”

以上就是本文的全部内容,希望对大家的学习有所帮助,轻松使用JS获取CSS样式。

Javascript 相关文章推荐
JavaScript prototype属性使用说明
May 13 Javascript
javascript (用setTimeout而非setInterval)
Dec 28 Javascript
13 个JavaScript 性能提升技巧分享
Jul 26 Javascript
jquery ajax对特殊字符进行转义防止js注入使用示例
Nov 21 Javascript
处理文本部分内容的TextRange对象应用实例
Jul 29 Javascript
JavaScript动态修改弹出窗口大小的方法
Apr 06 Javascript
jQuery()方法的第二个参数详解
Apr 29 Javascript
JavaScript中用let语句声明作用域的用法讲解
May 20 Javascript
jQuery实现radio第一次点击选中第二次点击取消功能
May 15 jQuery
js实现三角形粒子运动
Sep 22 Javascript
vue video和vue-video-player实现视频铺满教程
Oct 30 Javascript
原生JavaScript实现五子棋游戏
Nov 09 Javascript
详解javascript实现自定义事件
Jan 19 #Javascript
JS拖拽组件学习使用
Jan 19 #Javascript
理解JS绑定事件
Jan 19 #Javascript
AngularJS模块学习之Anchor Scroll
Jan 19 #Javascript
jQuery unbind()方法实例详解
Jan 19 #Javascript
jQuery绑定事件监听bind和移除事件监听unbind用法实例详解
Jan 19 #Javascript
详解JavaScript对象序列化
Jan 19 #Javascript
You might like
php压缩多个CSS为一个css的代码并缓存
2011/04/21 PHP
PHP 使用header函数设置HTTP头的示例解析 表头
2013/06/17 PHP
解析PHP中empty is_null和isset的测试
2013/06/29 PHP
ThinkPHP缓存方法S()概述
2014/06/13 PHP
php中实现可以返回多个值的函数实例
2015/03/21 PHP
php多线程并发实现方法
2016/09/30 PHP
PHP实现与java 通信的插件使用教程
2019/08/11 PHP
javascript 模拟JQuery的Ready方法实现并出现的问题
2009/12/06 Javascript
JavaScript中的字符串操作详解
2013/11/12 Javascript
javascript下拉列表菜单的实现方法
2015/11/18 Javascript
switch语句的妙用(必看篇)
2016/10/03 Javascript
详解nodejs微信公众号开发——6.自定义菜单
2017/04/13 NodeJs
浅析Angular2子模块以及异步加载
2017/04/24 Javascript
Vue-cli3.x + axios 跨域方案踩坑指北
2019/07/04 Javascript
JavaScript如何使用插值实现图像渐变
2020/06/28 Javascript
Python GAE、Django导出Excel的方法
2008/11/24 Python
Python 时间操作例子和时间格式化参数小结
2014/04/24 Python
Python中使用select模块实现非阻塞的IO
2015/02/03 Python
Django实现快速分页的方法实例
2017/10/22 Python
基于python代码实现简易滤除数字的方法
2018/07/17 Python
Python爬虫框架Scrapy基本用法入门教程
2018/07/26 Python
python检测文件夹变化,并拷贝有更新的文件到对应目录的方法
2018/10/17 Python
基于python代码批量处理图片resize
2020/06/04 Python
python实现简易版学生成绩管理系统
2020/06/22 Python
美国女性运动零售品牌:Lady Foot Locker
2017/05/12 全球购物
美国领先的奢侈美容零售商:Bluemercury
2017/07/26 全球购物
美国最好的保健品打折网店:Swanson
2017/08/04 全球购物
expedia比利时:预订航班+酒店并省钱
2018/07/13 全球购物
Allsole美国/加拿大:英国一家专门出售品牌鞋子的网站
2018/10/21 全球购物
搬家公司的创业计划书
2014/01/01 职场文书
教师竞聘上岗演讲稿
2014/09/03 职场文书
毕业实习指导教师评语
2014/12/31 职场文书
应届生简历自我评价
2015/03/11 职场文书
2016年秋季趣味运动会开幕词
2016/03/04 职场文书
nginx配置之并发频次限制
2022/04/18 Servers
Python 图片添加美颜效果
2022/04/28 Python