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实现CheckBox的全选与取消全选的代码
Jul 20 Javascript
浅析Javascript使用include/require
Nov 13 Javascript
5个可以帮你理解JavaScript核心闭包和作用域的小例子
Oct 08 Javascript
jquery实现在网页指定区域显示自定义右键菜单效果
Aug 25 Javascript
JavaScript File API实现文件上传预览
Feb 02 Javascript
JS组件Bootstrap dropdown组件扩展hover事件
Apr 17 Javascript
AngularJS入门教程之静态模板详解
Aug 18 Javascript
浅谈js算法和流程控制
Dec 29 Javascript
使用mint-ui实现省市区三级联动效果的示例代码
Feb 09 Javascript
vuex与组件联合使用的方法
May 10 Javascript
node获取客户端ip功能简单示例
Aug 24 Javascript
JavaScript函数IIFE使用详解
Oct 21 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读取PDF内容配合Xpdf的使用
2012/11/24 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
PHP程序员必须知道的两种日志实例分析
2020/05/14 PHP
jquery的冒泡事件的阻止与允许(三种实现方法)
2013/02/01 Javascript
JavaScript函数的4种调用方法详解
2014/04/22 Javascript
关于Javascript 对象(object)的prototype
2014/05/09 Javascript
js中this用法实例详解
2015/05/05 Javascript
js日期范围初始化得到前一个月日期的方法
2015/05/05 Javascript
JavaScript中setUTCFullYear()方法的使用简介
2015/06/12 Javascript
PHP+jQuery+Ajax+Mysql如何实现发表心情功能
2015/08/06 Javascript
JS+CSS实现仿支付宝菜单选中效果代码
2015/09/25 Javascript
弹出遮罩层后禁止滚动效果【实现代码】
2016/04/29 Javascript
第四篇Bootstrap网格系统偏移列和嵌套列
2016/06/21 Javascript
基于vue实现多引擎搜索及关键字提示
2017/03/16 Javascript
vue.js整合vux中的上拉加载下拉刷新实例教程
2018/01/09 Javascript
Angular父子组件通过服务传参的示例方法
2018/10/31 Javascript
layer设置maxWidth及maxHeight解决方案
2019/07/26 Javascript
微信小程序自定义组件components(代码详解)
2019/10/21 Javascript
vue实现PC端分辨率适配操作
2020/08/03 Javascript
jQuery实现日历效果
2020/09/11 jQuery
如何实现小程序与小程序之间的跳转
2020/11/04 Javascript
[47:35]VP vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
讲解python参数和作用域的使用
2013/11/01 Python
Python时间戳与时间字符串互相转换实例代码
2013/11/28 Python
在Python中使用__slots__方法的详细教程
2015/04/28 Python
在win和Linux系统中python命令行运行的不同
2016/07/03 Python
django框架CSRF防护原理与用法分析
2019/07/22 Python
将python字符串转化成长表达式的函数eval实例
2020/05/11 Python
Python 实现国产SM3加密算法的示例代码
2020/09/21 Python
美国最古老的精致书写工具制造商:A.T. Cross(高仕)
2018/01/30 全球购物
四年大学生活的个人自我评价
2013/12/11 职场文书
化学工程专业求职信
2014/08/10 职场文书
校本研修个人总结
2015/02/28 职场文书
大学生预备党员自我评价
2015/03/04 职场文书
校车安全管理责任书
2015/05/11 职场文书
成事在人观后感
2015/06/16 职场文书