CSS技術概覽:動態表達式的構想也許是源自於以下的一些場景:
元素的尺寸或者位置由浏覽器或者Html文檔來計算
使用變量作為style屬性的值,比如頻繁使用的顏色,用一個全局變量
包括浏覽器的鼻祖Netscape以及IE浏覽器都試圖在CSS中使用Javascript,Netscape公司在很久很久以前提出了JSS技術,當然只支持Netscape浏覽器:
“JavaScript Style Sheets. In the beginning, they were JASS (JavaScript Accessible Style Sheets), then JSSS or JSS (Javascript Style Sheets), and now Netscape has taken to calling them Style Sheets with JavaScript Syntax. They exist in the Netscape DHtml documentation, a few books, and a couple of old third party articles on the web. The best introduction to JSS is by Html veteran Chuck Musciano, at SunWorld. A concise, clear examination, this article was written a year ago (April 1997). Next to nothing has been written on the Web since then。”
一段經典的Netscape浏覽器的JSS代碼如下所示:
是不是覺得非常怪異?您無需懷疑,這確實是浏覽器鼻祖netscape的發明,隨著與IE競爭的失敗,Netscape浏覽器逐漸退出歷史舞台,相應地,JSS技術已經泯滅於人間。以下的地址給出了JSS的詳細介紹:http://www.webreference.com/DHtml/column18/menuFrJSS.Html
微軟公司在IE5之後提出了“動態屬性(Dynamic PropertIEs)”技術:
“IE5及其以後版本支持在CSS中使用expression,用來把CSS屬性和Javas cript表達式關聯起來,這裡的CSS屬性可以是元素固有的屬性,也可以是自定義屬性。就是說CSS屬性後面可以是一段Javas cript表達式,CSS屬性的值等於Javas cript表達式計算的結果。 在表達式中可以直接引用元素自身的屬性和方法,也可以使用其他浏覽器對象。這個表達式就好像是在這個元素的一個成員函數中一樣。 ”
CSS技術概覽:一段經典的CSS Expression代碼如下:
- #myDiv
- {
- position: absolute;
- width: 100px;
- height: 100px;
- left: expression(document.body.offsetWidth - 110 + "px");
- top: expression(document.body.offsetHeight - 110 + "px");
- background: red;
- }
IE的動態表達式出現的時候,引起不少web開發者的狂歡,但是時隔不久,其卑劣的性能開始引起人們的诟病,據稱,動態表達式在DOM發生更新的那一瞬間居然執行了上萬次,另外由於與web標准的不兼容,CSS Expression幾乎已經被日益追求潮流的web開發者所擯棄。
最終,IE8宣稱在其標准模式不再支持動態表達式(Dynamic Dynamic PropertIEs或者CSS Expression),參見:http://blogs.msdn.com/IE/archive/2008/10/16/ending-expressions.ASPx
關於動態表達式(Dynamic PropertIEs或者CSS Expression)的更多介紹,請參見:http://msdn.microsoft.com/en-us/library/ms537634(VS.85).ASPx
至此,兩大浏覽器的巨頭都終止了在CSS中使用Javascript的妄想,但是CSS混Javascript的滅亡只是浏覽器大戰以及自定標准與W3C標准競爭的犧牲品而已。
從以上的史實來看,在CSS中使用Javascript看來已被證明為一條沒有前途的路,因此民間程序員開始把動態CSS的研究重心轉為CSS的核心之一-“選擇器”,亦即“通過Javascript實現當前尚不能實現的選擇器”,這一方面的研究成果,最著名的莫過於在廚房擺放一台個人網站服務器的英國人狄恩-愛德華(Dean edwards,個人主頁:http://dean.edwards.name/)的"ie7.js",網址:http://code.google.com/p/ie7-js/或http://IE7-JS.googlecode.com/svn/test/index.Html,"IE7.JS"提前實現了W3C的CSS3標准,當然它的功能不限於此。
在民間,還是有很多人在研究如何在CSS中使用Javascript或者使用Javascript來擴展現有CSS的功能,比如這位仁兄:http://andykent.bingodisk.com/bingo/public/JSs/,他開發了一個基於JQuery的插件,能夠提前實現CSS3的選擇器,他把他的作品命名為JSS(Javascript Style Sheets)。
為什麼一些狂熱的程序員會對基於Javascript的CSS樂此不疲呢?
筆者認為主要有以下兩個原因:
1、CSS本身的靜態特性
2、W3C標准與浏覽器版本不能也永遠不能同步的矛盾
3、Html開發人員的期望與W3C標准不能也永遠不能同步的矛盾
Html的CSS技術本身的缺點已經引起了軟件開發巨頭的注意,在當前狂躁的應用程序標記語言中,比如微軟的XAML或adobe的MXML,其CSS(暫且稱之為CSS吧)不僅可以動態定義,甚至還可以定義屬性、內容和事件。也許,在幾年之後,我們將看到W3C准備修正新的CSS標准,讓其更加動態化。CSS技術概覽到此結束。