CSS expression屬性

expression屬性是在IE5版本以後支持使用的,用來把CSS屬性和JavaScript腳本關聯起來。簡單粗暴的說,該屬性是用來調用JavaScript代碼的。css

CSS屬性後面是一段JavaScript代碼,CSS的值是JavaScript表達式計算的結果。html

給元素固有屬性賦值

.box1{
    position: absolute;
    top: expression(eval(document.documentElement.scrollTop+80)); /* 這裏須要獲取滾動高度+元素本來的高度 */
    z-index: 999;
}

document.documentElement.scrollTop 的意思是獲取當前頁面滾動條所滾動到的位置的數值,而再用eval()函數把它計算成數值。express

這句代碼最終的意思就是:你瀏覽器窗口的滾動條滑到哪,這個元素的位置就在哪。瀏覽器

給元素自定義屬性賦值

用CSS自定義屬性Expression對錶格行間隔背景批量定義性能優化

<html>
  <head>
  <title></title>
  <style type="text/css">
  tr{ bg:expression('#F8F8F8,#EFEFEF'.split(',')[rowIndex%2]); }
  </style>
  </head>
  <body>
  <table width="100%" border="0">
   <tr>
     <td>&nbsp;</td>
   </tr>
   <tr>
     <td>&nbsp;</td>
   </tr>
   <tr>
     <td>&nbsp;</td>
   </tr>
   <tr>
     <td>&nbsp;</td>
   </tr>
   <tr>
     <td>&nbsp;</td>
   </tr>
   <tr>
     <td>&nbsp;</td>
   </tr>
   <tr>
     <td>&nbsp;</td>
   </tr>
   <tr>
     <td>&nbsp;</td>
   </tr>
   <tr>
     <td>&nbsp;</td>
   </tr>
 </table>
 </body>
</html>

上面的代碼能夠實現表格行背景色(#F8F8F8,#EFEFEF)交替出現,不須要每行單獨定義。函數

bg是本身任意定義的屬性。在自定義屬性與expression之間可別忘了還有一個引號,由於實質仍是CSS,因此放在style標籤內,而非script內。性能

注意

不是很是須要,通常不建議使用expression,由於expression對瀏覽器資源要求比較高優化

CSS expression的問題就在於它的計算頻率要比想象的多出不少。不單單是在頁面顯示和縮放時,就是在頁面滾動、乃至移動鼠標時都會要從新計算一次。給CSS expression增長一個計數器能夠跟蹤表達式的計算頻率。在頁面中隨便移動鼠標均可以輕鬆達到10000次以上的計算量。code

性能優化

一個減小CSS expression計算次數的方法就是使用一次性的表達式,它在第一次運行時將結果賦給指定的樣式屬性,並用這個屬性來代替CSS expression。htm

CSS expression屬性存在不少問題,最好的優化就是不使用該屬性。

相關文章
相關標籤/搜索