湮滅的風流-基於JavaScript的CSS技術概覽

來源:互聯網
上載者:User

  自從CSS出現以來,就有廠商希望CSS能夠更加靈活一點,最早的CSS動態化體現為“動態運算式”(或動態屬性,Dynamic attribute)的構想,動態運算式的構想也許是源自於以下的一些情境:

  1.   元素的尺寸或者位置由瀏覽器或者html文檔來計算
  2.   使用變數作為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代碼如下所示:

 

<STYLE TYPE='text/javascript'>
with (parent.frames.main.document.classes.items.SPAN) {
    width = menuWidth;
    color = fntCol;
    fontSize = fntSiz;
    fontWeight = fntWgh;
    fontStyle = fntSty;
    fontFamily = fntFam;
    borderWidth = borWid;
    borderColor = borCol;
    borderStyle = borSty;
    lineHeight = linHgt;
}
</STYLE>
   是不是覺得非常怪異?您無需懷疑,這確實是瀏覽器鼻祖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 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.   1、CSS本身的靜態特性
  2.   2、W3C標準與瀏覽器版本不能也永遠不能同步的矛盾
  3.   3、html開發人員的期望與W3C標準不能也永遠不能同步的矛盾

 

  html的CSS技術本身的缺點已經引起了軟體開發巨頭的注意,在當前狂躁的應用程式標記語言中,比如微軟的XAML或adobe的MXML,其CSS(暫且稱之為CSS吧)不僅可以動態定義,甚至還可以定義屬性、內容和事件。也許,在幾年之後,我們將看到W3C準備修正新的CSS標準,讓其更加動態化。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.