本文觀點(diǎn):遵循國(guó)際網(wǎng)站標(biāo)準(zhǔn)(Web Standards)進(jìn)行網(wǎng)站設(shè)計(jì)和改善。
閱讀對(duì)象:網(wǎng)站設(shè)計(jì)人員、web應(yīng)用開發(fā)人員
關(guān)鍵字:Web Standards、XML、XHML、CSS、DOM、DOCTYPE、Accessibility
前言
網(wǎng)絡(luò)上的變革每天都在發(fā)生,當(dāng)我們覺得網(wǎng)站設(shè)計(jì)技術(shù)已經(jīng)非常簡(jiǎn)單和熟悉的時(shí)候。國(guó)外網(wǎng)站設(shè)計(jì)標(biāo)準(zhǔn)化的概念早已悄悄的形成和迅速"蔓延",自2000年起,大部分新發(fā)行的瀏覽器版本都開始支持網(wǎng)站標(biāo)準(zhǔn)。主流的網(wǎng)頁編輯工具也開始全面支持網(wǎng)站標(biāo)準(zhǔn),甚至一些軟件幾乎完全由XML文件組成,例如Dreamweaver MX。一些著名的大型商業(yè)網(wǎng)站開始采用網(wǎng)站標(biāo)準(zhǔn)來重新構(gòu)建(例如體育資訊www.espn.com),另外一些則拒絕非標(biāo)準(zhǔn)瀏覽器瀏覽它們的網(wǎng)站(例如連線雜志www.wired.com)。眾多的設(shè)計(jì)網(wǎng)站(例如:www.k10k.net) 和個(gè)人網(wǎng)站更是標(biāo)準(zhǔn)推廣的先行者,紛紛轉(zhuǎn)向采用XHTML+CSS來建立。2004年2月4日XML1.1推薦標(biāo)準(zhǔn)正式發(fā)布,標(biāo)志著網(wǎng)站設(shè)計(jì)的標(biāo)準(zhǔn)時(shí)代已經(jīng)到來。
國(guó)外網(wǎng)站標(biāo)準(zhǔn)的聲勢(shì)洶涌,但國(guó)內(nèi)業(yè)界顯得有些后知后覺或者毫無興趣,讓我們來看看國(guó)內(nèi)三大門戶網(wǎng)站首頁對(duì)網(wǎng)站標(biāo)準(zhǔn)的遵循情況:校驗(yàn)項(xiàng)目 校驗(yàn)?zāi)繕?biāo)網(wǎng)站 校驗(yàn)結(jié)果
代碼校驗(yàn)(XHTML)?
(校驗(yàn)地址:http://validator.w3.org/、
(http://www.htmlhelp.com/tools/validator/ ) www.sina.com.cn 失敗,混雜的HTML,未達(dá)到XHTML1。黃色警報(bào):字符集錯(cuò)誤。(定義了GB2312,但頁內(nèi)使用了非GB2312字符)。非標(biāo)準(zhǔn)代碼43處。?
www.163.com 失敗,混雜的HTML,未達(dá)到XHTML1。紅色警報(bào):未定義DOCTYPE。非標(biāo)準(zhǔn)代碼41處。?
www.sohu.com 失敗,混雜的HTML,未達(dá)到XHTML1。黃色警報(bào):字符集錯(cuò)誤。非標(biāo)準(zhǔn)代碼38處。
CSS2校驗(yàn) (校驗(yàn)地址:http://jigsaw.w3.org/css-validator/validator-uri.html ) www.sina.com.cn 25處錯(cuò)誤。
www.163.com 1處警告,10處錯(cuò)誤。
www.sohu.com 1處警告,15處錯(cuò)誤。
校驗(yàn)結(jié)果顯示所有門戶網(wǎng)站都沒有符合網(wǎng)站標(biāo)準(zhǔn),甚至連HTML4.0標(biāo)準(zhǔn)都沒有遵循。舉例來說:標(biāo)簽,早在1998年4月HTML4.0標(biāo)準(zhǔn)中就已經(jīng)被W3C列為"不建議使用(deprecated)"標(biāo)簽。但我們的三大門戶網(wǎng)站首頁上都有不少類似的代碼。這里的簡(jiǎn)單列表,目的不是批評(píng)這些網(wǎng)站做得不好(事實(shí)上大部分的大型商業(yè)站點(diǎn)都通不過W3C嚴(yán)格的正確性校驗(yàn)),有很多的原因造成這種狀況,例如采用老的信息發(fā)布系統(tǒng),網(wǎng)頁設(shè)計(jì)人員的技術(shù)和意識(shí)不夠等等。我們只是想說明一點(diǎn):連比較規(guī)范的上市公司的網(wǎng)站都沒有意識(shí)到遵循標(biāo)準(zhǔn),其他規(guī)模教小的商業(yè)網(wǎng)站就更不用說,國(guó)內(nèi)對(duì)網(wǎng)站標(biāo)準(zhǔn)沒有足夠的重視。
讓我們趕緊跟上新時(shí)代的步伐,一起來了解一下網(wǎng)站標(biāo)準(zhǔn)吧。
一.為什么要建立網(wǎng)站標(biāo)準(zhǔn)
我們大部分人都有深刻體驗(yàn),每當(dāng)主流瀏覽器版本的升級(jí),我們剛建立的網(wǎng)站就可能變得過時(shí),我們就需要升級(jí)或者重新建造一遍網(wǎng)站。例如1996-1999年典型的"瀏覽器大戰(zhàn)",為了兼容Netscape和IE,網(wǎng)站不得不為這兩種瀏覽器寫不同的代碼。同樣的,每當(dāng)新的網(wǎng)絡(luò)技術(shù)和交互設(shè)備的出現(xiàn),我們也需要制作一個(gè)新版本來支持這種新技術(shù)或新設(shè)備,例如支持手機(jī)上網(wǎng)的WAP技術(shù)。類似的問題舉不勝舉:網(wǎng)站代碼臃腫、繁雜浪費(fèi)了我們大量的帶寬;針對(duì)某種瀏覽器的DHTML特效,屏蔽了部分潛在的客戶;不易用的代碼,殘障人士無法瀏覽網(wǎng)站等等。這是一種惡性循環(huán),是一種巨大的浪費(fèi)。
如何解決這些問題呢?有識(shí)之士早已開始思考,需要建立一種普遍認(rèn)同的標(biāo)準(zhǔn)來結(jié)束這種無序和混亂。商業(yè)公司(Netscape、Microsoft等)也終于認(rèn)識(shí)到統(tǒng)一標(biāo)準(zhǔn)的好處,因此在W3C(W3C.org)的組織下,網(wǎng)站標(biāo)準(zhǔn)開始被建立(1998年2月10日發(fā)布XML1.0為標(biāo)志),并在網(wǎng)站標(biāo)準(zhǔn)組織(webstandards.org)的督促下推廣執(zhí)行。
簡(jiǎn)單說,網(wǎng)站標(biāo)準(zhǔn)的目的就是:
提供最多利益給最多的網(wǎng)站用戶?
確保任何網(wǎng)站文擋都能夠長(zhǎng)期有效?
簡(jiǎn)化代碼、降低建設(shè)成本?
讓網(wǎng)站更容易使用,能適應(yīng)更多不同用戶和更多網(wǎng)路設(shè)備?
當(dāng)瀏覽器版本更新,或者出現(xiàn)新的網(wǎng)絡(luò)交互設(shè)備時(shí),確保所有應(yīng)用能夠繼續(xù)正確執(zhí)行。?
對(duì)于網(wǎng)站設(shè)計(jì)和開發(fā)人員來說,遵循網(wǎng)站標(biāo)準(zhǔn)就是使用標(biāo)準(zhǔn);對(duì)于你的網(wǎng)站用戶來說,網(wǎng)站標(biāo)準(zhǔn)就是最佳體驗(yàn)。
訪問量排名世界第4,中國(guó)第1的新浪網(wǎng)站,也遭遇非標(biāo)準(zhǔn)DHTML的問題。在最新發(fā)布的Netscape7和Mozila1.6瀏覽器中,新浪首頁的漂浮廣告全部失效,層疊擠在頁面左下角。也許那些廣告主認(rèn)為損失這些潛在的用戶無所謂。(截圖日期2004年5月19日)
?
二.什么是網(wǎng)站標(biāo)準(zhǔn)
網(wǎng)站標(biāo)準(zhǔn)不是某一個(gè)標(biāo)準(zhǔn),而是一系列標(biāo)準(zhǔn)的集合。網(wǎng)頁主要由三部分組成:結(jié)構(gòu)(Structure)、表現(xiàn)(Presentation)和行為(Behavior)。對(duì)應(yīng)的標(biāo)準(zhǔn)也分三方面:結(jié)構(gòu)化標(biāo)準(zhǔn)語言主要包括XHTML和XML,表現(xiàn)標(biāo)準(zhǔn)語言主要包括CSS,行為標(biāo)準(zhǔn)主要包括對(duì)象模型(如W3C DOM)、ECMAScript等。這些標(biāo)準(zhǔn)大部分由W3C起草和發(fā)布,也有一些是其他標(biāo)準(zhǔn)組織制訂的標(biāo)準(zhǔn),比如ECMA(European Computer Manufacturers Association)的ECMAScript標(biāo)準(zhǔn)。我們來簡(jiǎn)單了解一下這些標(biāo)準(zhǔn):
1.結(jié)構(gòu)標(biāo)準(zhǔn)語言
(1)XML?
XML是The Extensible Markup Language(可擴(kuò)展標(biāo)識(shí)語言)的簡(jiǎn)寫。目前推薦遵循的是W3C于2000年10月6日發(fā)布的XML1.0,參考(www.w3.org/TR/2000/REC-XML-20001006)。和HTML一樣,XML同樣來源于SGML,但XML是一種能定義其他語言的語。XML最初設(shè)計(jì)的目的是彌補(bǔ)HTML的不足,以強(qiáng)大的擴(kuò)展性滿足網(wǎng)絡(luò)信息發(fā)布的需要,后來逐漸用于網(wǎng)絡(luò)數(shù)據(jù)的轉(zhuǎn)換和描述。關(guān)于XML的好處和技術(shù)規(guī)范細(xì)節(jié)這里就不多說了,網(wǎng)上有很多資料,也有很多書籍可以參考。
(2)XHTML?
XHTML是The Extensible HyperText Markup Language可擴(kuò)展標(biāo)識(shí)語言的縮寫。目前推薦遵循的是W3C于2000年1月26日推薦XML1.0(參考http://www.w3.org/TR/xhtml1)。XML雖然數(shù)據(jù)轉(zhuǎn)換能力強(qiáng)大,完全可以替代HTML,但面對(duì)成千上萬已有的站點(diǎn),直接采用XML還為時(shí)過早。因此,我們?cè)贖TML4.0的基礎(chǔ)上,用XML的規(guī)則對(duì)其進(jìn)行擴(kuò)展,得到了XHTML。簡(jiǎn)單的說,建立XHTML的目的就是實(shí)現(xiàn)HTML向XML的過渡。
2. 表現(xiàn)標(biāo)準(zhǔn)語言
CSS是Cascading Style Sheets層疊樣式表的縮寫。目前推薦遵循的是W3C于1998年5月12日推薦CSS2(參考http://www.w3.org/TR/CSS2/)。W3C創(chuàng)建CSS標(biāo)準(zhǔn)的目的是以CSS取代HTML表格式布局、幀和其他表現(xiàn)的語言。純CSS布局與結(jié)構(gòu)式XHTML相結(jié)合能幫助設(shè)計(jì)師分離外觀與結(jié)構(gòu),使站點(diǎn)的訪問及維護(hù)更加容易。
3.行為標(biāo)準(zhǔn)
(1)DOM
DOM是Document Object Model文檔對(duì)象模型的縮寫。根據(jù)W3C DOM規(guī)范(http://www.w3.org/DOM/),DOM是一種與瀏覽器,平臺(tái),語言的接口,使得你可以訪問頁面其他的標(biāo)準(zhǔn)組件。簡(jiǎn)單理解,DOM解決了Netscaped的Javascript和Microsoft的Jscript之間的沖突,給予web設(shè)計(jì)師和開發(fā)者一個(gè)標(biāo)準(zhǔn)的方法,讓他們來訪問他們站點(diǎn)中的數(shù)據(jù)、腳本和表現(xiàn)層對(duì)像。
(2) ECMAScript
ECMAScript是ECMA(European Computer Manufacturers Association)制定的標(biāo)準(zhǔn)腳本語言(JAVAScript)。目前推薦遵循的是ECMAScript 262(http://www.ecma.ch/ecma1/STAND/ECMA-262.HTM)。
三.遵循標(biāo)準(zhǔn)的網(wǎng)站與傳統(tǒng)網(wǎng)站的區(qū)別
傳統(tǒng)網(wǎng)站只是印刷媒體的延伸,設(shè)計(jì)目標(biāo)是保證在4-6個(gè)主流瀏覽器版本中看起來一致。通常的特征是:
以表格為基礎(chǔ)的布局。?
內(nèi)容與表現(xiàn)方式混雜在一起。典型的例子是標(biāo)簽。?
垃圾代碼(非標(biāo)準(zhǔn)代碼)。?
不易用的代碼。?
語義不正確的代碼。比如不解釋的話,你根本不明白這是字體加粗的意思。?
而采用網(wǎng)站標(biāo)準(zhǔn)建立的網(wǎng)站是一個(gè)能夠接受各種用戶和各種設(shè)備的廣泛的交流溝通工具。一般特征是:
語義正確的標(biāo)識(shí)。即使用能夠表達(dá)含義的標(biāo)簽。保證代碼可以在文本瀏覽器、PDAs、搜索引擎中被正確理解。?
正確有效的代碼。通過W3C代碼校驗(yàn)(http://validator.w3.org/)的就是正確代碼。?
對(duì)人、機(jī)都易用的代碼。能夠接受廣泛的用戶和設(shè)備的訪問,?
用CSS分離表現(xiàn)層和內(nèi)容。使代碼更簡(jiǎn)潔、下載速度更快,批量修改和定制表現(xiàn)形式更容易。?
四.采用網(wǎng)站標(biāo)準(zhǔn)的好處和缺點(diǎn)
1.好處
對(duì)網(wǎng)站瀏覽者的好處:
文件下載與頁面顯示速度更快;?
內(nèi)容能被更多的用戶所訪問(包括失明、視弱、色盲等殘障人士);?
內(nèi)容能被更廣泛的設(shè)備所訪問(包括屏幕閱讀機(jī)、手持設(shè)備、搜索機(jī)器人、打印機(jī)、電冰箱等等)?
用戶能夠通過樣式選擇定制自己的表現(xiàn)界面?
所有頁面都能提供適于打印的版本?
對(duì)網(wǎng)站所有者的好處:
更少的代碼和組件,容易維護(hù)?
帶寬要求降低(代碼更簡(jiǎn)潔),成本降低。舉個(gè)例子:當(dāng) ESPN.com 使用 CSS改版后,每天節(jié)約超過兩兆字節(jié)(terabytes)的帶寬。?
更容易被搜尋引擎搜索到?
改版方便,不需要變動(dòng)頁面內(nèi)容?
提供打印版本而不需要復(fù)制內(nèi)容?
提高網(wǎng)站易用性。在美國(guó),有嚴(yán)格的法律條款(Section 508)來約束政府網(wǎng)站必須達(dá)到一定的易用性,其他國(guó)家也有類似的要求。?
2.缺點(diǎn)
需要花費(fèi)更多時(shí)間來學(xué)習(xí)標(biāo)準(zhǔn)?
依然需要注意瀏覽器的兼容問題?
用 CSS 來實(shí)現(xiàn)某些表現(xiàn)反而比表格更為麻煩?
五.怎么改善現(xiàn)有網(wǎng)站
我們大部分的設(shè)計(jì)師依舊在采用傳統(tǒng)的表格布局、表現(xiàn)與結(jié)構(gòu)混雜在一起的方式來建立網(wǎng)站。學(xué)習(xí)使用XHTML+CSS的方法需要一個(gè)過程,使現(xiàn)有網(wǎng)站符合網(wǎng)站標(biāo)準(zhǔn)也不可能一步到位。最好的方法是循序漸進(jìn),分階段來逐步達(dá)到完全符合網(wǎng)站標(biāo)準(zhǔn)的目標(biāo)。如果你是新手,或者對(duì)代碼不是很熟悉,也可以采用遵循標(biāo)準(zhǔn)的編輯工具,例如Dreamweaver MX 2004,它是目前支持CSS標(biāo)準(zhǔn)最完善的工具。
1.初級(jí)改善
為頁面添加正確的DOCTYPE?
很多設(shè)計(jì)師和開發(fā)者都不知道什么是DOCTYPE,DOCTYPE有什么用。DOCTYPE是document type的簡(jiǎn)寫。主要用來說明你用的XHTML或者HTML是什么版本。瀏覽器根據(jù)你DOCTYPE定義的DTD(文檔類型定義)來解釋頁面代碼。所以,如果你不注意設(shè)置了錯(cuò)誤的DOCTYPE,結(jié)果會(huì)讓你大吃一驚。XHTML1.0提供了三種DOCTYPE可選擇:
(1)過渡型(Transitional )
?
(2)嚴(yán)格型(Strict )
?
(3)框架型(Frameset )
?
對(duì)于我們初級(jí)改善來說,只要選用過渡型的聲明就可以了。它依然可以兼容你的表格布局、表現(xiàn)標(biāo)識(shí)等,不至于讓你覺得變化太大,難以掌握。
Tip:你懶得輸入上面過渡型代碼的話,可以訪問http://www.macromedia.com/網(wǎng)站的首頁,然后查看源代碼,把head區(qū)同樣的代碼拷貝粘貼就可以了。
設(shè)定一個(gè)名字空間(Namespace)?
直接在DOCTYPE聲明后面添加如下代碼:
?
一個(gè)namespace是收集元素類型和屬性名字的一個(gè)詳細(xì)的DTD,namespace聲明允許你通過一個(gè)在線地址指向來識(shí)別你的namespace。只要照樣輸入代碼就可以。
聲明你的編碼語言?
為了被瀏覽器正確解釋和通過標(biāo)識(shí)校驗(yàn),所有的XHTML文檔都必須聲明它們所使用的編碼語言。代碼如下:
?
這里聲明的編碼語言是簡(jiǎn)體中文GB2312,你如果需要制作繁體內(nèi)容,可以定義為BIG5。
用小寫字母書寫所有的標(biāo)簽?
XML對(duì)大小寫是敏感的,所以,XHTML也是大小寫有區(qū)別的。所有的XHTML元素和屬性的名字都必須使用小寫。否則你的文檔將被W3C校驗(yàn)認(rèn)為是無效的。例如下面的代碼是不正確的:
公司簡(jiǎn)介?
正確的寫法是:
公司簡(jiǎn)介 同樣的,
改成
,改成等等。這步轉(zhuǎn)換很簡(jiǎn)單。?
為圖片添加 alt 屬性?
為所有圖片添加alt屬性。alt屬性指定了當(dāng)圖片不能顯示的時(shí)候就顯示供替換文本,這樣做對(duì)正常用戶可有可無,但對(duì)純文本瀏覽器和使用屏幕閱讀機(jī)的用戶來說是至關(guān)重要的。只有添加了alt屬性,代碼才會(huì)被W3C正確性校驗(yàn)通過。注意的是我們要添加有意義的alt屬性,象下面這樣的寫法毫無意義:
?
正確的寫法:
?
給所有屬性值加引號(hào)?
在HTML中,你可以不需要給屬性值加引號(hào),但是在XHTML中,它們必須被加引號(hào)。
例:height="100",而不能是height=100。
關(guān)閉所有的標(biāo)簽?
在XHTML中,每一個(gè)打開的標(biāo)簽都必須關(guān)閉。就象這樣:
每一個(gè)打開的標(biāo)簽都必須關(guān)閉。
HTML可以接受不關(guān)閉的標(biāo),XHTML就不可以。?
這個(gè)規(guī)則可以避免HTML的混亂和麻煩。舉例來說:如果你不關(guān)閉圖像標(biāo)簽,在一些瀏覽器中就可能出現(xiàn)CSS顯示問題。用這種方法能確保頁面和你設(shè)計(jì)的一樣顯示。需要說明的是:空標(biāo)簽也要關(guān)閉,在標(biāo)簽尾部使用一個(gè)正斜杠"/"來關(guān)閉它們自己。例如:
?
經(jīng)過上述七個(gè)規(guī)則處理后,頁面就基本符合XHTML1.0的要求。但我們還需要校驗(yàn)一下是否真的符合標(biāo)準(zhǔn)了。我們可以利用W3C提供免費(fèi)校驗(yàn)服務(wù)(http://validator.w3.org/)。發(fā)現(xiàn)錯(cuò)誤后逐個(gè)修改。在后面的資源列表中我們也提供了其他校驗(yàn)服務(wù)和對(duì)校驗(yàn)進(jìn)行指導(dǎo)的網(wǎng)址,可以作為W3C校驗(yàn)的補(bǔ)充。當(dāng)最后通過了XHTML驗(yàn)證,恭喜你已經(jīng)向網(wǎng)站標(biāo)準(zhǔn)邁出了一大步。不是想象中的那么難吧!
2.中級(jí)改善
接下來我們的改善主要在結(jié)構(gòu)和表現(xiàn)相分離上,這一步不象第一步那么容易實(shí)現(xiàn),我們需要觀念上的轉(zhuǎn)變,以及對(duì)CSS2技術(shù)的學(xué)習(xí)和運(yùn)用。但學(xué)習(xí)任何新知識(shí)都需要花點(diǎn)時(shí)間的,不是嗎?訣竅在于邊做邊學(xué)。假如你一直采用表格布局,根本沒用過 CSS,也不必急于跟表格布局說再見,你可以先用樣式表代替 font 標(biāo)簽。隨著你學(xué)到的越多,你能做的就越多。好,一起來看看我們需要做哪些事:
用CSS定義元素外觀?
我們?cè)趯憳?biāo)識(shí)時(shí)已經(jīng)養(yǎng)成習(xí)慣,當(dāng)希望字體大點(diǎn)就用
,希望在前面加個(gè)點(diǎn)符號(hào)就用
。我們總是想的意思是大的,
的意思是圓點(diǎn),的意思是“加粗文本”。而實(shí)際上, 能變成你想要的任何樣子,通過CSS,能變成小的字體,
文本能夠變成巨大的、粗體的,
能夠變成一張圖片等等。我們不能強(qiáng)迫用結(jié)構(gòu)元素實(shí)現(xiàn)表現(xiàn)效果,我們應(yīng)該使用CSS來確定那些元素的外觀。例如,我們可以使原來默認(rèn)的6級(jí)標(biāo)題可以看起來大小一樣:
h1, h2, h3, h4, h5, h6{ font-family: 宋體, serif; font-size: 12px; }?
用結(jié)構(gòu)化元素代替無意義的垃圾?
許多人可能從來都不知道HTML和XHTML元素設(shè)計(jì)本意是用來表達(dá)結(jié)構(gòu)的。我們很多人已經(jīng)習(xí)慣用元素來控制表現(xiàn),而不是結(jié)構(gòu)。例如,一段列表內(nèi)容可能會(huì)使用下面這樣的標(biāo)識(shí):
句子一
句子二
句子三
?
如果我們采用一個(gè)無序列表代替會(huì)更好:
你或許會(huì)說“但是
顯示的是一個(gè)圓點(diǎn),我不想用圓點(diǎn)”。事實(shí)上,CSS沒有設(shè)定元素看起來是什么樣子,你完全可以用CSS關(guān)掉圓點(diǎn)。
給每個(gè)表格和表單加上id?
給表格或表單賦予一個(gè)唯一的、結(jié)構(gòu)的標(biāo)記,例如