什麼是CSS expression?
IE5及其以後版本支援在CSS中使用expression,用來把CSS屬性和Javascript指令碼關聯起來,這裡的CSS屬性可以是元素固有的屬性,也可以是自訂屬性。就是說CSS屬性後面可以是一段Javascript運算式,CSS屬性的值等於Javascript運算式計算的結果。在運算式中可以直接引用元素自身的屬性和方法,也可以使用其他瀏覽器對象。這個運算式就似乎是在這個元素的一個成員函數中一樣。是不是感覺上面的文字有點晦澀?沒有關係,你只需要知道:我們可以通過expression把Javascript指令碼寫放在css檔案中,通過它來實現一些很方便的功能與效果。
運算式應用:
1、給元素固有屬性賦值 下面的執行個體是依照瀏覽器的大小來安置一個元素的位置。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>mid.lt263.com/mb</title><style type="text/css">#myDiv {position: absolute;width: 100px;height: 100px;background:#c00;left: expression(document.body.offsetWidth - 180 "px");top: expression(document.body.offsetHeight - -80 "px");text-align:center;line-height:90px;color:#fff;}</style></head><body><div id="myDiv">mb5u.com</div></body></html>
2、給元素自訂屬性賦值
我們看下面的例子:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>mid.lt263.com/mb</title><style type="text/css">a {star:expression(this.onFocus=this.blur())}</style></head><body><a href="#" _fcksavedurl="#">模板天下 - mid.lt263.com/mb</p></body></html>
說明:裡面的star就是自己任意定義的屬性,你可以隨自己喜好另外定義,接著包含在expression()裡的語句就是JS指令碼,在自訂屬性與expression之間可別忘了還有一個引號,因為實質還是CSS,所以放在style標籤內,而非script內。這樣就很輕易地用一句話實現了頁面中的連結虛線框的消除。需要引起你非凡重視的:若不是非常非凡的需要用到expression,一般不建議使用expression,因為expression對瀏覽器資源要求比較高。
CSS運算式是動態設定CSS屬性的強大(但危險)方法。Internet Explorer從第5個版本開始支援CSS運算式。下面的例子中,使用CSS運算式可以實現隔一個小時切換一次背景顏色:
background-color: expression( (new Date()).getHours()%2 ? "#B8D4FF" : "#F08A00" );
如上所示,expression中使用了JavaScript運算式。CSS屬性根據JavaScript運算式的計算結果來設定。expression方法在其它瀏覽器中不起作用,因此在跨瀏覽器的設計中單獨針對Internet Explorer設定時會比較有用。
運算式的問題就在於它的計算頻率要比我們想象的多。不僅僅是在頁面顯示和縮放時,就是在頁面滾動、乃至移動滑鼠時都會要重新計算一次。給CSS運算式增加一個計數器可以跟蹤運算式的計算頻率。在頁面中隨便移動滑鼠都可以輕鬆達到10000次以上的計算量。
一個減少CSS運算式計算次數的方法就是使用一次性的運算式,它在第一次運行時將結果賦給指定的樣式屬性,並用這個屬性來代替CSS運算式。如果樣式屬性必須在頁面周期內動態地改變,使用事件控制代碼來代替CSS運算式是一個可行辦法。如果必須使用CSS運算式,一定要記住它們要計算成千上萬次並且可能會對你頁面的效能產生影響。