ホームページ >ウェブフロントエンド >htmlチュートリアル >element_html/css_WEB-ITnose の CSS 値を取得する getComputedStyle メソッドに精通している

element_html/css_WEB-ITnose の CSS 値を取得する getComputedStyle メソッドに精通している

WBOY
WBOYオリジナル
2016-06-24 11:35:221233ブラウズ

1. 再版を続けます

2. getComputedStyle とは何ですか?

getComputedStyle は、現在の要素の最終的に使用された CSS 属性値をすべて取得できるメソッドです。返されるのは、読み取り専用の CSS スタイル宣言オブジェクト ([object CSSStyleDeclaration]) です。 getComputedStyle()は、要素のすべてのCSSプロパティの最終的な使用値を示しています。中国人、言うのは簡単なことではありません。追加のリマインダー: Gecko 2.0 (Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1) より前では、2 番目のパラメーター「擬似クラス」が必須でした (擬似クラスでない場合は、null に設定します)。しかし、現在は必須です。必須パラメータではありません。

3. getComputedStyle と style の違い

element.style を使用して要素の CSS スタイル宣言オブジェクトを取得することもできますが、getComputedStyle メソッドとはいくつかの違いがあります。

読み取り専用および書き込み可能

前述したように、getComputedStyle メソッドは読み取り専用で、スタイルを取得することのみができますが、設定することはできません。

取得されるオブジェクトのスコープ

getComputedStyle メソッドは、要素に最終的に適用されるすべての CSS 属性オブジェクトを取得します (CSS コードがない場合でも、デフォルトの祖先の 8 世代が表示されます)。 style 属性で要素 CSS スタイルを取得します。したがって、ベア要素 e388a4556c0f65e1904146cc1a846bee の場合、オブジェクトの getComputedStyle メソッドによって返される長さ属性値 (存在する場合) は 190 以上です (私のテストによると、FF: 192、IE9: 195、Chrome: 253、結果は環境によっては異なる場合があります)、element.style は 0 です。

4. getComputedStyle とdefaultView

    jQuery ソース コードを見ると、その css() メソッドが window.getComputedStyle ではなく document.defaultView.getComputedStyle を使用して実装されていることがわかります。これは同じことですか?
  1. 実際、defaultView を使用する必要は基本的にはなく、getComputedStyle 自体は window オブジェクト内に存在します。 DennisHall 氏によると、defaultView を使用するのは、人々がウィンドウ専用に何かを書きたくないからかもしれません。第 2 に、API が Java でも利用できるからです (これは理解できません、指摘するのを忘れていました~~)。
  2. ただし、FireFox3.6 では、defaultView メソッドを使用しないと解決できない特殊なケースがあり、これはフレーム スタイルにアクセスします
  3. 5. 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文件,页面中嵌入的c9ccee2e6ea535a969eb3f532ad9fe89属性等)。

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

//zxx: 如果你只知jQuery css()方法,你是不会知道伪类样式也是可以获取的,虽然部分浏览器不支持。

例如,我们要获取一个元素的高度,可以类似下面的代码:

alert((element.currentStyle? element.currentStyle : window.getComputedStyle(element, null)).height);

您可以狠狠地点击这里:使用getComputedStyle和currentStyle 获取元素高度demo

结果FireFox下显示24px(经过计算了), 而IE浏览器下则是CSS中的2em属性值:

getComputedStyle方法与currentStyle属性其他具体差异还有很多,我以一个普通按钮做元素,遍历了其中靠谱的属性名和属性值,您可以狠狠地点击这里:getComputedStyle和currentStyle属性展示demo

仔细对比查看,我们可以看到不少差异,例如浮动属性,FireFox浏览器下是这个(cssFloat):

IE7浏览器下则是styleFloat:

而IE9浏览器下则是cssFloat和styleFloat都有。

等其他N多差异。

七、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+以及其他现代浏览器都支持,见下表:

?
  Chrome Firefox (Gecko) Internet Explorer Opera Safari
基本支持 9

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");

实例才是王道,您可以狠狠地点击这里:getPropertyValue和getAttribute获取背景色demo

结果FireFox下一如既往的rgb颜色返回(Chrome也是返回rgb颜色):

对于IE9浏览器,虽然应用的是currentStyle, 但是从结果上来讲,currentStyle返回的对象是完全支持getPropertyValue方法的。

九、getPropertyValue和getPropertyCSSValue

从长相上看getPropertyCSSValue与getPropertyValue是近亲,但实际上,getPropertyCSSValue要顽劣的多。

getPropertyCSSValue方法返回一个CSS最初值(CSSPrimitiveValue)对象(width, height, left, …)或CSS值列表(CSSValueList)对象(backgroundColor, fontSize, …),这取决于style属性值的类型。在某些特别的style属性下,其返回的是自定义对象。该自定义对象继承于CSSValue对象(就是上面所说的getComputedStyle以及currentStyle返回对象)。

getPropertyCSSValue方法兼容性不好,IE9浏览器不支持,Opera浏览器也不支持(实际支持,只是老是抛出异常)。而且,虽然FireFox中,style对象支持getPropertyCSSValue方法,但总是返回null. 因此,目前来讲,getPropertyCSSValue方法可以先不闻不问。

十、补充~结语

有了jQuery等优秀库,我们有熟悉底层的getComputedStyle方法的必要吗?

实际上,本文一直没有深入展开getComputedStyle方法一个很重要的,类似css()方法没有的功能??获取伪类元素样式。但从这一点上将,熟悉getComputedStyle方法有必要。

下一篇文章,我就将介绍如何实现getComputedStyle方法在伪类元素上的特异功能,实现CSS3 media queries下一些JS交互,及实际应用。

well, 开篇已经?哩吧嗦不少内容了,这里就不再讲废话了。行文匆忙,文中难免有表述不准确之处,欢迎指正。欢迎补充,感谢阅读,希望本文的内容能够对您的学习有所帮助。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。