關於獲取元素的樣式的兼容問題

table不能遺露了tbody的最後測試圖中,會發現雖然設置了table的一個高度,但通過瀏覽器渲染後的實際高度沒有200px,所以,小小研究一下,記錄以下css

1、style

    能夠經過style來獲取一個元素的內聯樣式,這個返回值就是你設置的值(顏色能夠會變進制)html

    1.  能夠返回組合式的樣式,好比font,border,background等,chrome

        a),  但在處理顏色上稍微有一些變化,好比background = #000000  在 IE > 9和其餘瀏覽器中會把它算成rgb而後返回來(rgb(0,0,0)),但 IE < 9中直接返回你所設置的#000000瀏覽器

        b).  在輸出順序上有必定的變化,好比  border: 1px solid #000,   在IE > 9和其餘瀏覽器中會輸出 測試

          1px solid rgb(0, 0, 0) 但在ie < 9中會輸出   #000000 1px solid  ,而且這個順序是不會據你設置的順序來改變的,是瀏覽器固定了的this

  2.假如你想獲取一個在行間沒設置的樣式或者是一個非標準的樣式,IE < 9 會返回一個undefined, 其餘的瀏覽器會返回一個空字符串spa

2、currentStyle

  這個是IE係獲取計算後的樣式值;語法以下code

      element.currentStyle[attr]orm

     返回的的是一個只讀的CSSStyleDeclaration對象,其中[ie6 => 110個, ie7,ie8 => 124個, ie9 => 201個 , ie10 => 298個]個屬性,包含各自的私有屬性htm

1.不能獲取組合式樣式的值,在IE < 9 中返回undefined,在ie > 9 中返回 空字符串

     obj.currentStyle[‘font’]  ==>  ie < 9 ?   undefined :  ‘’

2. 對顏色的不進行進制轉換的處理,#000000  ===> #000000,對百分比也不進行處理

3.對於瀏覽器支持的屬性,可是沒有設置相應的屬性的(好比說 boxShadow), IE > 9 返回 默認值 好比( 'none’, 'auto’)

   obj.currentStyle[‘boxShadow’] ===> ie < 9 ? undefined : ‘none’

4.對於瀏覽器不支持的屬性(好比說'fsy’) 瀏覽器都會返回 undefined

3、getComputedStyle

這個是標準瀏覽器獲(ie>9 和其餘的)取樣式值,

語法

   var style = window.getComputedStyle(element[, pseudoElt]);
   返回的是一個只讀的CSSStyleDeclaration對象,其中[ie9 => 201, ie10 => 298, chrome29 => 258; opera16 => 267, safari5.17 => 233,  ff23.01 => 210]個屬性,還有6個方法
  getPropertyCSSValue,getPropertyPriority,getPropertyValue,item,removeProperty,setProperty
1.常見的用法
   getComputedStyle(element,null)[attr]
   a).  這個用法不能獲取組合屬性
   b).  這個用法獲取的是絕對值,會對百分比,小數點進行處理,(ie ff對絕對值是小數的不會進行取整,opera,chrome,safari會把小數向下取整,返回一個整數)不會對顏色進行處理
   c).  對於瀏覽器不支持的屬性(好比自造的,瀏覽器私有屬性)返回undefined
   d).  對於沒有重寫的屬性,會返回瀏覽器默認值
   e). 最重要的區別是,這個屬性對於table的處理
getComputedStyle

  對於一個元素的HTML屬性有border時,並重寫了它的高(寬,不論是樣式重寫,仍是HTML屬性聲明border),ff  ie會把bordder計算在內,而chrome,opera,safari會把實際的border除掉 (緣由,我以爲是對table的渲染機制不一樣)

PS1:  關於getComputedStyle中的第二個參數問題

   第二個參數能夠是null,空字符串,也能夠是' : before, : after, :first-line等僞類'

   1、當一個元素自己就支持的僞類

   1.  獲取一個僞類元素的內容,好比

getComputedStyle

  a)  ff,ie 會直接把content的內容不通過解析直接當字符串返回 ==>  "\"fsy\"」  長度爲5

  b)  chrome,safari,opera 會把content通過解析後的內容返回 ===> "fsy"      長度爲3

  c)  二者的類型都是string

   2. 當一個元素支持的僞類設置了高與寬,但沒將它設置成塊級元素(行內塊級),獲取它的高度

  

getComputedStyle


  a) ff,ie,safari會返回設置的值  ===> 100px

  b) chrome,opera 返回屬性的默認值 ===> auto

   3. 當一個元素支持的屬性,好比返回p: before的boxShadow,都會返回默認值 'none’

   2、當一個元素自己不支持的僞類,也被強行設置了屬性,好比

getComputedStyle


   1.獲取它的content

    ie  ==> ‘normal’

    ff ===>  ‘none’

    safari,ff,chrome ===> ‘’

    總結:當獲取一個元素僞類的content時,若是該元素不支持這個屬性;ie ==> ‘normal’   ff ==> ‘none’  其餘的 ==>  ''

   2.  獲取它的寬度 所有===> ‘100px’

   3.  獲取它的boxShadow  ===> ‘none’

   4. 獲取它不存在的屬性 ‘fsy’  ===> undefined

三.目前就對a: [link | visited | focus | hover | acitve] : before : after支持度比較好 ,有的瀏覽器返回的僅僅是設置值,而不是計算值

ps2: 關於getComputedStyle幾個方法的運用

1. getPropertyValue 返回一個元素的計算值,與currentStyle同樣,但也有不一樣的

    a)  這個方法在opera16,chrome29中獲取組合屬性,顏色也會轉換成rgb模式,但在其餘瀏覽器中仍是不能夠

===================================================================

    注: 如下內容摘自張鑫旭-鑫空間-鑫生活[http://www.zhangxinxu.com]

    b) 能夠獲取CSS樣式申明對象上的屬性值(直接屬性名稱),例如:

     window.getComputedStyle(element, null).getPropertyValue("float");

       若是咱們不使用getPropertyValue方法,直接使用鍵值訪問,其實也是能夠的。可是,好比這裏的的float,若是使用鍵值訪問,則不能直接使用getComputedStyle(element, null).float,而應該是cssFloatstyleFloat,天然須要瀏覽器判斷了,比較折騰!

   c)   使用getPropertyValue方法沒必要能夠駝峯書寫形式(不支持駝峯寫法),例如:style.getPropertyValue("border-top-left-radius");

2.getPropertyCSSValue

  a)  getPropertyCSSValue方法返回一個CSS最初值(CSSPrimitiveValue)對象(width, height, left, …)或CSS值列表(CSSValueList)對象(backgroundColor, fontSize, …),這取決於style屬性值的類型。在某些特別的style屬性下,其返回的是自定義對象。該自定義對象繼承於CSSValue對象(就是上面所說的getComputedStyle以及currentStyle返回對象)。

  b) getPropertyCSSValue方法兼容性很差,IE9瀏覽器不支持,Opera瀏覽器也不支持(實際支持,只是總是拋出異常)。並且,雖然FireFox中,style對象支持getPropertyCSSValue方法,但老是返回null. 所以,目前來說,getPropertyCSSValue方法能夠先漠不關心。

=================完畢================================================

3.   getPropertyPriority()

    若是在規則中指定CSS特性"important",則返回"important";不然返回空字符串。

4.  removeProperty(propertyName)

    從CSS定義中刪除propertyName。

5.item(index)

  返回在給定索引index處的CSS特性的名稱,例如"background-color"。

6. setProperty(propertyName,value,priority)

   按照指定的優先級priority來設置CSS特性propertyName的value值("important"或者爲空字符串)。

 

4、window.getDefaultComputedStyle

   文檔 : window.getDefaultComputedStyle

相關文章
相關標籤/搜索