zoukankan      html  css  js  c++  java
  • getComputedStyle/currentStyle/style之间的爱恨情仇

    • getComputedStyle是?

      • getComputedStyle是一个可以获取当前元素所有最终使用的CSS属性值。返回的是一个CSS样式声明对象([object CSSStyleDeclaration]),只读。

        getComputedStyle() gives the final used values of all the CSS properties of an element.

        语法如下:

        var style = window.getComputedStyle("元素", "伪类");
        例如:

        var dom = document.getElementById("test"),
        style = window.getComputedStyle(dom , ":after");

    • getComputedStyle与style的区别

      • 我们使用element.style也可以获取元素的CSS样式声明对象,但是其与getComputedStyle方法还有有一些差异的。
        1. 只读与可写
          正如上面提到的getComputedStyle方法是只读的,只能获取样式,不能设置;而element.style能读能写,能屈能伸。
        2. 获取的对象范围
          getComputedStyle方法获取的是最终应用在元素上的所有CSS属性对象(即使没有CSS代码,也会把默认的祖宗八代都显示出来);而element.style只能获取元素style属性中的CSS样式。因此对于一个光秃秃的元素<p>,getComputedStyle方法返回对象中length属性值(如果有)就是190+(据我测试FF:192, IE9:195, Chrome:253, 不同环境结果可能有差异), 而element.style就是0。

    • getComputedStyle兼容性

      • 对于桌面设备:

        Chrome Firefox (Gecko) Internet Explorer Opera Safari
        基本支持 支持 支持 9 支持 支持
        伪类元素支持 支持 支持 不支持 不支持 支持
        对于手机设备:

        Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
        基本支持 支持 支持 WP7 Mango 支持 支持
        伪元素支持 ? ? 不支持 ? ?
        上面打问号的表示没有测试,是否兼容不知。如果您方便测试,欢迎将测试结果告知,这里将及时更新,并附上您的姓名,以谢您做的贡献。

        我们先把注意力放在桌面设备上,可以看到,getComputedStyle方法IE6~8是不支持的,得,背了半天的媳妇,发现是孙悟空变的——郁闷了。不急,IE自有自己的一套东西。

    • getComputedStyle与currentStyle

      • currentStyle是IE浏览器自娱自乐的一个属性,其与element.style可以说是近亲,至少在使用形式上类似,element.currentStyle,差别在于element.currentStyle返回的是元素当前应用的最终CSS属性值(包括外链CSS文件,页面中嵌入的<style>属性等)。

        因此,从作用上将,getComputedStyle方法与currentStyle属性走的很近,形式上则stylecurrentStyle走的近。不过,currentStyle属性貌似不支持伪类样式获取,这是与getComputedStyle方法的差异,也是jQuery css()方法无法体现的一点。

    • getPropertyValue方法

      • getPropertyValue方法可以获取CSS样式申明对象上的属性值(直接属性名称),例如:

        window.getComputedStyle(element, null).getPropertyValue("float");
        如果我们不使用getPropertyValue方法,直接使用键值访问,其实也是可以的。但是,比如这里的的float,如果使用键值访问,则不能直接使用getComputedStyle(element, null).float,而应该是cssFloat与styleFloat,自然需要浏览器判断了,比较折腾!

        使用getPropertyValue方法不必可以驼峰书写形式(不支持驼峰写法),例如:style.getPropertyValue("border-top-left-radius");

        兼容性
        getPropertyValue方法IE9+以及其他现代浏览器都支持

          OK,一涉及到兼容性问题(IE6-8肿么办),感觉头开始微微作痛了~~,不急,IE自由一套自己的套路,就是getAttribute方法。

    • getPropertyValue和getAttribute

      • 在老的IE浏览器(包括最新的),getAttribute方法提供了与getPropertyValue方法类似的功能,可以访问CSS样式对象的属性。用法与getPropertyValue类似:

        style.getAttribute("float");
        注意到没,使用getAttribute方法也不需要cssFloat与styleFloat的怪异写法与兼容性处理。不过,还是有一点差异的,就是属性名需要驼峰写法,如下:

        style.getAttribute("backgroundColor");
        如果不考虑IE6浏览器,貌似也是可以这么写:

        style.getAttribute("background-color");

        

      

  • 相关阅读:
    selenium之 关闭窗口close与quit
    如何去掉xmind的备注红色下划线
    cmd里面快速粘贴复制的设置方式以及初始位置设置
    Python中的空格和缩进问题总结
    python 单例实现
    logging 简单使用
    CTypes
    类装饰器使用
    Django admin
    Django 视图
  • 原文地址:https://www.cnblogs.com/yuxinpeng/p/6142136.html
Copyright © 2011-2022 走看看