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代码加载优化方法
Jan 30 Javascript
js 调用本地exe的例子(支持IE内核的浏览器)
Dec 26 Javascript
JavaScript保留两位小数的2个自定义函数
May 05 Javascript
jQuery实现仿百度帖吧头部固定导航效果
Aug 07 Javascript
关于JavaScript的变量的数据类型的判断方法
Aug 14 Javascript
使用canvas实现仿新浪微博头像截取上传功能
Sep 02 Javascript
浅谈JavaScript 数据属性和访问器属性
Sep 01 Javascript
vue完成项目后,打包成静态文件的方法
Sep 03 Javascript
详解Vue2.5+迁移至Typescript指南
Aug 01 Javascript
浅谈Vue.js之初始化el以及数据的绑定说明
Nov 14 Javascript
vue中如何添加百度统计代码
Dec 19 Vue.js
在vue中import()语法不能传入变量的问题及解决
Apr 01 Vue.js
详解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将XML转数组过程详解
2013/11/13 PHP
PHP 二维数组和三维数组的过滤
2016/03/16 PHP
PHP通过微信跳转的Code参数获取用户的openid(关键代码)
2016/07/06 PHP
详谈PHP中的密码安全性Password Hashing
2017/02/04 PHP
基于逻辑运算的简单权限系统(实现) JS 版
2007/03/24 Javascript
编写高性能的JavaScript 脚本的加载与执行
2010/04/19 Javascript
jQuery中andSelf()方法用法实例
2015/01/08 Javascript
jQuery修改class属性和CSS样式整理
2015/01/30 Javascript
JavaScript中调用函数的4种方式代码实例
2015/07/08 Javascript
JavaScript 实现的 zip 压缩和解压缩工具包Zip.js使用详解
2015/12/14 Javascript
javascript的BOM
2016/05/03 Javascript
JavaScript实战之带收放动画效果的导航菜单
2016/08/16 Javascript
详解javascript立即执行函数表达式IIFE
2017/02/13 Javascript
JS实现PC手机端和嵌入式滑动拼图验证码三种效果
2017/02/15 Javascript
ES6中Proxy代理用法实例浅析
2017/04/06 Javascript
令按钮悬浮在(手机)页面底部的实现方法
2017/05/02 Javascript
微信小程序 action-sheet 反馈上拉菜单简单实例
2017/05/11 Javascript
vue中的自定义分页插件组件的示例
2018/08/18 Javascript
JS实现随机点名器
2020/04/12 Javascript
NodeJS和浏览器中this关键字的不同之处
2021/03/03 NodeJs
比较详细Python正则表达式操作指南(re使用)
2008/09/06 Python
深入探究Python中变量的拷贝和作用域问题
2015/05/05 Python
python判断字符串编码的简单实现方法(使用chardet)
2016/07/01 Python
PyQt4实现下拉菜单可供选择并打印出来
2018/04/20 Python
python实现nao机器人身体躯干和腿部动作操作
2019/04/29 Python
Python中一些深不见底的“坑”
2019/06/12 Python
Python坐标轴操作及设置代码实例
2020/06/04 Python
Python爬取微信小程序Charles实现过程图解
2020/09/29 Python
UNIONBAY官网:美国青少年服装品牌
2019/03/26 全球购物
工地资料员岗位职责
2013/12/31 职场文书
简历的个人自我评价范文
2014/01/03 职场文书
员工试用期自我鉴定范文
2014/09/15 职场文书
音乐教育专业自荐信
2014/09/18 职场文书
体育活动总结
2015/02/04 职场文书
入党积极分子考察意见
2015/06/02 职场文书
解析高可用Redis服务架构分析与搭建方案
2021/06/20 Redis